Приветствую, хабровчане. Долгое время работал в сфере разработки программного обеспечения для систем контроля доступа, охраны акваторий и гидроакустики, применяемых на разных далеких и не очень объектах нашей необъятной родины. Некоторые из систем, приходилось запускать в условиях тундры, тайги и полярного круга. За свои почти 20 лет карьеры, и больше 10 лет "програмировай давай" таких систем, прожил разные моменты, частью из которых хочу поделиться с вами. Предыдущие приключения ездового кота можно почитать здесь. Особо строго не судите, пишу для души...
Записка пятая, или призрак в доспехах
Связанная с запиской четвертой, если кратко, то система охраны акватории отработала где‑то с полгода и люди в погонах решили её расширить на другие участки. Особо ничего интересного не произошло, приехали поставили, наладили и подключили, уехали домой и тут начинается вал запросов, что все «ничего не работает, все накрылось, совсем не работает, в одно слово». А мы там были только два дня назад, и все сдали под пломбу, чтобы матросики никуда не лезли. Так как система была автономная, и подключиться к ней можно было только локально, то процесс отладки происходил по телефону и фоточками экрана, суть проблемы что оборудование (читай мелкие пк на линухе) перестало адекватно работать, и отрубается после подключения к нему через 20–30 секунд. Весь комплекс представлял из себя грид мелких пк, которые получали данные от контроллера, что‑то с ними делали и отдавали обратно. Рассчитано все это было так, чтобы система не ложилась под нагрузкой при масштабировании, и можно было докинуть блоки обработки в стойку при горячей замене, ну и просто на случай резервирования конечно. Вот таким удаленным дебагом с лагом в 5–10 секунд, отлаживаем систему, все как говорит оператор, система дико тупит, один цикл обзора акватории и анализа данных вместо положенных 2 секунд занимает 15–20, а то и больше, что естественно кармы нам не добавляет, а только седых волос. Не придумав ничего, что приблизительно могло бы исправить ситуацию, начинаем «удаленным отладчиком» подключаться к разным блокам обработки и смотреть логи, подключились вывели на экран лог — смотрим.
Через 20–30 секунд блок рвет ssh по непонятной причине, идей нет, продолжаем тупить в логи и курить в курилке, мысленно собираясь ехать в командировку. Пока в какой‑то момент один из коллег замечает, что лог с одного и того же блока поменялся между сессиями. Представьте ситуацию, вы открываете текстовый файл, в котором написано слово «cчастье», моргаете и видите это слово, но написанное буквами «а, п, о» и «ж». Не верите? И я тоже не верил, не складывается счастье из этих букв. Начинаются смутные подозрения о причине происходящего, звоним в IT отдел и просим рассказать, зачем они копались в системе, просто наугад сказали, чтобы побольше страху нагнать, а оказалось попали в точку. Причина оказалась настолько простой, что чаще оказывается хуже воровства — на балансе проекта осталась некоторая сумма, которую нельзя было списать больше никуда. Высокое начальство, недолго думая, дает команду IT отделу докинуть в стойку новых блоков обработки, сколько влезет. Влезла примерно половина от общего количества, но дозаказывать решили не у нас, а взяли похожие по формату и мощности пк, ну сами понимаете, потому что дешевле и сейчас, а мы только через полгода поставим и за деньги, а оставшуюся сумму лучше списать под ноль, чтобы в следующий раз дали больше. IT отдел, тоже не подумал и сделал dd на диск рабочих блоков и скопировал получившегося франкенштейна на новые блоки. Куда dd сетевого инженера дотянулся, то и скопировал, а где получилось, там и развернул. У него то задача была простая — развернуть побольше оборудования. В итоге получилась конфигурация, в которой были абсолютные копии существующих блоков, от чего контроллер сходил с ума, то получая данные, то не получая, периодически запускалась самодиагностика и обнаруживая два одинаковых id в сети, посылала одному запрос на поверофф. И на этом бы все и закончилось, но умный упс (какой‑то супернавороченный на то время dell из серии rackmount) видя, что один из компов, выключился, включал его обратно. В итоге система постоянно ребутила половину блоков, на вторую приходилась доп нагрузка, время обработки катастрофически плыло и «ничего не работает, все накрылось, совсем не работает, в одно слово». Самое обидное, что мы сами активно «продавали» эту фичу заказчику, в надежде, что он позже закажет новых блоков для резерва, а нам будет премия. Продаваны, блин.
Записка шестая, или полтергейст Иван Иваныч
Начало десятых, я занимаюсь системой «умного» cctv для проекта «C» спасательного судна, был такой проект у большой питерской фирмы‑разработчика навигационных систем, для подъёма утонувших подлодок и судов с больших глубин. Готовим демонстрацию для высокого начальства — обстановка, оборудование, разводка питания на макете, все как на настоящем корабле. Кабели системы видеонаблюдения заведены в антивандальный короб, вскрыть который не представляется возможным, разве что топором, но откуда у программистов топор? А ключи от святая‑святых, контроллера камер известной амерской конторы с функцией AI отслеживания и распознавания всех и вся, кто попадается в область действия камер, за какие‑то сумасшедшие деньги, есть у лида и ГИПа. Неделя до показа, отказывает весь контур камер, не отдельные камеры или сегменты, а просто все видеонаблюдение легло.
Облазив по всем известным нычкам, где могло что‑то отказать, приходим к нашему антивандальному ящику, который цел и видимых повреждений снаружи нет. Но открывшаяся картина внутри, мягко сказать, удручает. Кабелей питания в супер‑пупер черный ящик нет, а у самих разъёмов такой вид, что их «грызли зубами». Тихо мирно меняем все, не поднимая тревоги, сдавать через неделю, нас просто не поймут если что. Кому понадобились копеечные провода при наличии в ящике устройств подороже? Риторический вопрос. Запустили проверили, ждем начала испытаний. Думаете закончилось все? Ха.. через два дня система опять мертвая, наперегонки с лидом летим на крыльях ужаса к нашему антивандальному коробу. Опять двадцать пять — кабеля выдраны, разъёмы питания погрызены еще сильнее. Чудеса, «в одно слово», только лиду почему‑то не смешно. Два дня до сдачи, возле короба натурально кидается палатка, якобы для отладки, с ноутбуком и программистом внутри и наказом каждые полчаса запускать doom, чтобы распугивать демонов и разных полтергейстов звуками игры стрельбы из «рельсы». И знаете... помогло. Параллельно выпросили отдельную камеру, которая смотрит на короб постоянно, и задумались о резервировании самого короба с железками внутри. Ну так, на всякий случай. Успешно прошли испытания, от света золотых погон и звезд с адмиральских фуражек можно было носить солнечные очки в помещении. Через три дня после сдачи и снятия поста наблюдения, кабелей в коробе опять не было. А через неделю я уходил на другой проект, с плюшками побольше и задачами поинтереснее.
Записка седьмая, или поющий буксир
Очередная командировка за полярным кругом, ставим гидроакустику для ловли всего подводнонезаметного, где‑то рядом со славным городом «В‑--во». Для помощи в постановке и таскании отражателей, водолазов и бесконечного потока морских баек, придали нам буксир с командой, назовем его «Поющий». Команда была известна тем, что любила «попеть» в море. Впрочем любила это делать достаточно часто, за что буксир за глаза называли менее благозвучным именем, меняя вторую букву имени. Но буксиров было немного, то один то другой стоял на ремонте, поэтому начальство на песни команды смотрело сквозь пальцы. Да и команда со своей работой справлялось точно не хуже своих коллег с буксиров, которые не имели привычки нагло петь. Постановка оборудования прошла успешно, команда наладки уходит на берег, а буксир ждет команды походить для настройки. Уже готовимся просить пустить водолазов, как с базы приходит команда буксиру прибыть обратно по неотложной надобности. Застоявшийся на одном месте буксир, на форсаже с разворотом улетает в сторону базы.
А у нас берегу в будочке, которая потом должна стать постом наблюдения, что-то неуловимо меняется. Будочку мелко потряхивает, а потом стол с арм на ускорении уезжает в стену, ускорения немного не хватило, чтобы эту самую стену отправить в путешествие вслед за кораблем. Вся команда в недоумении смотрит на внезапно оживший стол и только прилипшие к окну грустные глаза главного инженера наблюдают за бронированным кабелем, идущим от антенны к аппаратуре. Весело поблескивая мокрой броней на осеннем солнце, тот змеится в море и исчезает в глубине. Добрая душа с буксира забыла распустить концы троса, которым опускали антенну и отправила её в последний путь, т.е. утащила в сторону базы. Что тому буксиру полтонны железа, когда он апл-ки в базу заводит. Антенну мы потом, конечно нашли и отмыли, но она была уже не торт. Станцию сдавали через полгода с новым кабелем, а два километра старого так и покоятся где-то на дне, став пристанищем для большого числа ракообразных и моллюсков.
Записка восьмая, или лошадиная фамилия
Сдаем систему контроля доступа в столичном «гвозде» в опытную эксплуатацию, после подключения к общегородской БД госслужащих, начинают прилетать разные мелкие ошибки, которые оперативно чинятся, в основном скриптами. Все вроде норм, и тут как гром среди ясного неба, система невзлюбила одного министра: то в кабинете запрет, то в уборную не пустит, то баллы с карточки для еды снимет, причем происходит это исключительно после синка с городской базой и смены паролей и явок поздно вечером, так что у министра каждое утро новые приключения. Редкий день проходил без письма в саппорт от этого пользователя и вызова для починки, хотели уже карточку вездеход дать, только политика безопасности не позволяла. Конечно, министру это не нравится и вызывает фрустрацию и снижение работоспособности, отчего становится плохо не только ему, но и директору фирмы, которому уже пару раз звонили на мобильный суровые люди с просьбой починить. Пробуем на месте разобраться с проблемой, но как только происходит любое действие с данными персонажа, просто открыли страницу с данными, ошибка пропадает. Гейзенбаг, неуловимый и суровый. После этого министр ходит довольный, до следующего утра. Потратив пару дней на отладку, когда пришлось привлечь смежников и упросить их на время дать доступ к городской БД, выясняем следующее: после обновления версии общей БД, в конце каждой записи появилось поле с контрольной суммой типа int64, смежники об этом небольшом обновлении рассказать благополучно забыли, но конкретно для этого персонажа контрольная сумма данных его имени и фамилии складывалась в спец символ (utf-8 непечатный), который в нашей системе воспринимался как управляющий для начала байткода внутренней виртуальной машины скриптов. Так и получалось, что синк помимо обновления данных переписывал байткод скриптов конкретного человека, которые кое‑как и кое‑где выполнялись, вызывая странное поведение в случайных местах. Открытие же страницы министра в нашей системе, запускало проверки, которые видели несоответствие контрольных сумм и откатывали байт код. Проблема усугубилась тем, что систему сдали под ключ и с диском, обновлений по воздуху не было, да и вообще обновления тогда были хорошо если раз в месяц и под строгим надзором всего IT отдела и пары автоматчиков. Пришлось каждое утро в течение месяца, открывать страницу в системе управления и... закрывать её.
Всем хороших выходных и поменьше багов.