— Эй, сервер, дай-ка мне список твоих фай… Ай, ладно, некогда мне тебя ждать, тебя только за смертью посылать! Вот, пользователь, смотри: нету никаких файлов на сервере!
Причиной, вызвавшей проявление этой проблемы в случае конкретного пользователя, обратившегося в техподдержку, послужил тот факт, что время на его компьютере было значительно впереди планеты всей: пользователь то ли прилетел из будущего и не сменил дату, то ли сам переставил часы на год вперёд.
Сам факт того, что время ожидания отклика не постоянно, а рассчитывается, да ещё зависит от текущей даты на компьютере, многое говорит о предыдущих архитекторах и разработчиках программы. Разработчик посмеялся над забавным решением, исправил ошибку путём увеличения места для расчётов с 16 бит до 32 бит и без знака, прогнал тесты, забросил свой код в репозиторий и забыл об этой проблеме. Но что-то его по-прежнему грызло. И вот однажды он в конце рабочего дня сидел, читал анекдоты и смотрел котиков, и вдруг его осенило.
Часы на компьютере того пользователя были случайно переведены вперёд. Но у всех остальных они рано или поздно сами доберутся до часа «Ж», в который время ожидания отклика, согласно формуле, станет отрицательным. И тогда все пользователи во всём мире, хранящие данные на серверах (а это абсолютное большинство клиентов фирмы), не смогут открыть ни единого своего файла. Программист быстро провёл расчёт: момент, когда фирма неминуемо обанкротится, наступал через два месяца. А начальство-то и не знает…
В следующие два месяца фирма стояла на ушах. Были заброшены все другие дела, сорваны договора поставок, выплачены гигантские пени. Весь отдел разработки только и делал, что исправлял эту ошибку во всех версиях программы, которую кто-либо покупал, начиная с конца 1980-х годов. Весь отдел контроля качества гонял тесты на этом зоопарке, проверял работоспособность каждой версии в отдельности и менял дату так часто, что к концу рабочего дня уже никто не был уверен в том, какое сегодня число.
Фирма распространила бесплатное обновление для всех своих клиентов за все годы своего существования буквально за две недели до своего потенциального банкротства. Ни один другой клиент с этой ошибкой так и не столкнулся. С тех пор стандартной процедурой в отделе контроля качества является полное тестирование программы с датой, передвинутой на год вперёд, и ещё раз — на год назад.
А вы говорите — «проблема 2000»…
#10932: Смерть неверным пакетам
22:23 04.05.2013, IT happens
Приезжаю я как-то домой на выходные и радуюсь нормальному интернету (у самого в Екатеринбурге только 3G, так что 11 мегабит по оптике — в радость). Но внезапно возникает необходимость сделать кое-что по работе. Запускаю подключение к VPN. Network Manager делает пару попыток и вываливается в неизвестную ошибку. Погрешил на отпавший сервер и забил на полчасика. Но тут зачем-то решил подключиться через телефон, раздав с него инет. Всё заработало. Очевидно, что проблема либо в провайдере, либо в их же роутере (достался по акции). Набираю их телефон, жду минут десять.
— ***телеком, стажёр Никита, здравствуйте!
— Здравствуйте, стажёр Никита. Я боюсь, что мне потребуется кто-то более высокой квалификации, но вы наверняка захотите меня сначала послушать, так как этого требует ваша инструкция.
— Да, всё верно.
— Ну что ж. Меня интересует, балуется ли ваша компания тем, что вырезает PPTP-пакеты?
— Нет, у нас нет подключения по PPTP, у нас PPPoE.
— Эмм, вы ставите меня в тупик. Давайте с начала. Мне сейчас надо подключиться к VPN по PPTP, но подключение не устанавливается, когда я подключён через вашего провайдера, однако при подключении поверх 3G другого оператора проблем нет. Трассировку я проверил, она одинакова и там, и там за исключением начальных узлов.
— Давайте я переключу вас на специалиста.
— То-то же.
— Системный инженер Игорь, здравствуйте.
— Добрый вечер, Игорь. Проблема такая… — дальше я полностью объясняю ему всё произошедшее.
— Вы подключаетесь через телефон! Поддержка телефонной связи на другом номере, не звоните сюда!