Айтишные байки. Программируем сегодняшним днём.

Год, эдак, 16-ый. Проэкт всё тот же – SSO. И вот начинают жаловаться клиенты, что не работает. Если кому-то стало непонятно что именно не работает, то всё правильно. Именно в таком виде к нам приходили жалобы оень часто. Не работает, и всё. Методом тыка во все, что только можно и не можно, применяя грубые исключения и предположения. А также благодаря наводящим вопросам к клиенту удалось сузить проблему до Java8 + наш агент. Ибо только Java8 было новым фактором в конфигурации клиета. С архитектурной стороны здесь всё просто. SSO решение состоит из самого сервера и встраивоемого нашего агента в виде фильтра в клиентское приложение. И вот этот самый агент работал под Java8 (мы его тестировали под Java7). В данном случае агент коннектится к SSO серверу для аутентификации.

Начинаю тестировать. Строю тестовую среду в нашем окружении и с нашими приложениями. Пробую. И что? РАБОТАЕТ! Сука! Всё работает. С Java7 – работает, с Java8 – работает. Какой вывод самый простой? Спихнуть всё на окружение клиента. Но в таком случае нужно будет идти в его окружение и копаться там. А этого делать естессно не очень хочется. К тому же клиент жалуется, что оно то работает, то нет.

Далее я грубо изолирую части нашего кода, чтобы обеспечить исключительно коммуникацию с агентом и нашим тестовым сервером. Циклю всё и начинаю гонять. 15 итераций – всё ок, 30 – тоже, 50 – полёт нормальный. Причём эти все итерации нужно прогнать и на 7-ой и на 8-ой Java. Ожидаю каких либо проблем на 8-рке. Ничего. То есть или проблемы на стороне клиента или мой тест – гавно.

Менеджеру говорю – идей нет, у меня всё работает (с). Менеджер, не долго думая, подключает своего менеджера – типа отдувайся перед ним сам. А мне то что, бодро рапортую, что проблему отловить не можем – предлагаю воду сливать. В это время я запустил очередную итерацию под восьмёркой на 150 итераций. И вот после того как я сказал, что ничерта мы найти не можем у меня сыпятся коннекшены где-то после 100-ой итерации. Всех обрадовал и пошёл выкапывать багу.

Проблема оказалась в части кода вида:

Код писался несколько лет назад, когда о 8-ой джаве даже не догадывались. Как следсвие условие неоднозначное. FailState не определён. И как результат процессились куки из пятой Java для восьмой.

Вот как-то так.