Это был не конец

Jun 25, 2012 18:42

Я уже недавно ныл про трудности отладки, но внезапно оказалось, что история не закончена! Все получилось прямо как в типичной серии «Доктора Хауса» - если диагноз поставлен в середине серии, то он еще не окончательный.

В общем, проблема в железе действительно была, но не она была причиной наблюдаемых спецэффектов. Все оказалось до смехотворного просто.

Моя программа генерирует скрипт, который с некоторой (неважно какой) целью воздействует на узлы распределенной системы с помощью команды записи в регистр. Таких команд в скрипте несколько тысяч, и каждая из них выглядит примерно так:

mwrite 0xfe 11 0x00103d8 0x0f400f10

Второй аргумент здесь играет роль TTL: сколько коммутаторов нужно пройти пакету до прибытия в пункт назначения. Так вот, оказалось, что независимо от отсутствия или присутствия префикса «0x» этот аргумент трактуется как шестнадцатеричный. В документации это, разумеется, не описано.

Можете представить, какие восхитительные последствия это имело! Для систем диаметром меньше 10 все прекрасно работало, но стоило преодолеть этот рубеж, как все становилось как-то странно. Ну то есть для ближних узлов все вроде бы проходит нормально, но чем дальше узел, с которым мы работаем, тем чудесатее. Я даже грешным делом стал вспоминать про 500-mile email.

Итого: почти неделя работы, пара десятков человек, поднятых на уши, три исправленных символа в вызове fprintf. И непередаваемые чувства в момент нахождения ошибки.

UPD. Через три дня после описанных событий выпустили новую версию команды, которая понимала десятичные числа. Россия стремительным домкратом встает с колен!

ошибки, железо, работа, отладка

Previous post Next post
Up