Релиз IBProvider v3.27. Краткий итог.

Привет всем.

Собственно subj.

Последние несколько недель я размышлял над всем этим процессом и сейчас можно подвести некоторые итоги.

От начала до конца — чуть больше года. Эффективный объем времени, совпадает с начальным прогнозом — 6 месяцев. Остальное время съели релиз ADO.NET провайдера, перевод сайта на WordPress (грустно вздохнул) и другие процессы реальной жизни.

Немножко ошибся с оценкой объема исходного кода подсистемы. Думал уложиться в 800KB. Получилось 1.7MB. Учту на будущее. Впрочем, я думал что код будет компактным, но сложным. А он оказался (в конечном итоге) прямолинейным и объемным.

Объем исходных текстов модульных тестов — 3.7MB. Соотношение 1:2, в последнее время, стало нормой. Всего генерируется 24K тестов. Основной «мультипликатор» — 4 режима протокола соединения (rpc, batch_send, out_of_band, lazy_send).

32-х битная DLL провайдера увеличилась где-то на 670 килобайт. Это больше чем «весит» fbclient.dll. 200KB сожрали ресурсы с шаблонами сообщений серверных ошибок (английский и русский).

Нагрузочное тестирование показывает, что IBProvider при работе через встроенного клиента поедает на 5% процентов процессорного времени меньше, чем через fbclient.dll. А реальное время работы — вообще не поменялось. В целом, здесь сложно ожидать чуда. Код стал немного «умнее», но увеличилось количество проверок. Все, что приезжает из сети, теперь проверяется самым тщательным образом.

Этапы реализации

1. Реализация API через протоколы [симметричный, универсальный]x[rpc, batch_send, out_of_band] для FB2.1 (хотя по факту это был FB2.5 и 12-ый протокол) с минимальным отклонением от поведения fbclient.dll.

2. Реализация отмены операций на сервере (FB2.5, op_cancel). Пришлось переписать выборку рядов результирующего множества и изничтожить хрень с «размазанной» загрузкой ответов сервера (а я в неё столько вбухал…).

3. Реализация поддержки lazy_send. Результирующий код принципиально отличается от fbclient.dll.

4. Реализация шлюза между собственным клиентом и основным кодом (целевые сервера — FB2.5 и 2.5.1+). На этом этапе был экстаз от внутренней архитектуры IBProvider-a.

5. Реализация поддержки FB0.9, FB1, FB1.5, FB2.0, FB2.1 (10-ый и 11-ый протоколы).

Другие аспекты

Основной движущей силой была выделенная тестовая система низкоуровневого клиента. Качественный рывок произошел после того, как я её сделал многопоточной (позаимствовал код из основной тестовой системы IBProvider). Все сразу стало двигаться быстрее и веселее.

На протяжении всего процесса основной код IBProvider подвергся зверскому «рефакторингу» и умеренной доработке. Сформулирована политика партии для дальнейшей реорганизации файловой структуры проекта.

Последнюю пару месяцев оба моих компьютера (ноут и десктоп) работали на пределе. Не подвели. Но мысль о необходимости обновить компьютер для тестирования (десктоп) стала появляться все чаще и чаще. С другой стороны, это был экстремальный период, который повторится не скоро. Если вообще повторится.

При выходе на финишную прямую, желания «переписать все к чертовой матери (с) elmal» не возникло.

Вот как-то так оно все и создавалось.

Leave a Comment