Релиз 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» не возникло.
Вот как-то так оно все и создавалось.