Вести с полей

Начало недели весьма «удачное».

Утром обновил исходники EFCore и обнаружил что они опять сломали мой код.

А я планировал его сегодня немного сдвинуть вперед…

По этому поводу вспомнилась классика:

Win10 1709 vs Win10 1809

Вчера, в международный день дурака, я нажал «проверить обновления» и моя Win10 1709 (пропатченная в марте 2019 года) обновилась до сборки 1809 (2019-3).

Потом на неё накатилось еще одно обновление, потребовавшее перезагрузку компьютера.

За ночь пробежали нагрузочные тесты и теперь можно «оценить» последствия обновления.

Было:

[22.03.2019 21:33:01] [info] Provider DLL    :lcpi.ibprovider_v5_vc15_w64_prof_i.dll
[22.03.2019 21:33:01] [info] Provider Version:5.2.0.31153
[22.03.2019 21:33:01] [info] Server Name     :Firebird
[22.03.2019 21:33:01] [info] Server Version  :3.0.5.33112
[22.03.2019 21:33:01] [info] Client Name     :LCPI.IBProvider.RemoteFB
[22.03.2019 21:33:01] [info] Client Version  :5.2.0.31153
[22.03.2019 21:33:01] [info] Database ODS    :12.0
[22.03.2019 21:33:01] [info] Database Dialect:3
....
[23.03.2019 13:45:28] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[23.03.2019 13:45:28] [summary] [TESTS]
[23.03.2019 13:45:28] [summary] EXECUTED      : 695367
[23.03.2019 13:45:28] [summary] SUCCEEDED     : 695341
[23.03.2019 13:45:28] [summary] FAILED        : 0
[23.03.2019 13:45:28] [summary] WITH WARNINGS : 26 [ 45 warning(s) ]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] [TEST TIMES]
[23.03.2019 13:45:28] [summary] REAL          : 2316625873465 [2 day(s)16:21:02.5873465]
[23.03.2019 13:45:28] [summary] USER          : 655046718750  [18:11:44.6718750]
[23.03.2019 13:45:28] [summary] KERNEL        : 221669375000  [06:09:26.9375000]
[23.03.2019 13:45:28] [summary] TOTAL         : 876716093750  [1 day(s)00:21:11.6093750]
[23.03.2019 13:45:28] 
[23.03.2019 13:45:28] [TEST HEAP] Test heap is empty
[23.03.2019 13:45:28] [TEST HEAP] Validate ... OK
[23.03.2019 13:45:28] [TEST HEAP] Destroy ... OK
[23.03.2019 13:45:28] 
[23.03.2019 13:45:28] [summary] ------------------------------------------- [PROCESS INFORMATION]
[23.03.2019 13:45:28] [summary] [VIRTUAL MEMORY]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] PRIVATE BYTES      : 13236 KB       [12MB 948KB]
[23.03.2019 13:45:28] [summary] PEAK PRIVATE BYTES : 12651096 KB    [12GB 66MB 600KB]
[23.03.2019 13:45:28] [summary] VIRTUAL SIZE       : 155424 KB      [151MB 800KB]
[23.03.2019 13:45:28] [summary] PAGE FAULT COUNT   : 124775849
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] [HANDLES]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] HANDLES            : 158
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] TOTAL ERRORS  : 0
[23.03.2019 13:45:28] [summary] TOTAL WARNINGS: 45
[23.03.2019 13:45:28] [summary] FULL PASSES   : 1
[23.03.2019 13:45:28] [summary] GEN TESTS     : 8293105

Стало:

[01.04.2019 16:32:12] [info] Provider DLL    :lcpi.ibprovider_v5_vc15_w64_prof_i.dll
[01.04.2019 16:32:12] [info] Provider Version:5.3.0.31155
[01.04.2019 16:32:12] [info] Server Name     :Firebird
[01.04.2019 16:32:12] [info] Server Version  :3.0.5.33112
[01.04.2019 16:32:12] [info] Client Name     :LCPI.IBProvider.RemoteFB
[01.04.2019 16:32:12] [info] Client Version  :5.3.0.31155
[01.04.2019 16:32:12] [info] Database ODS    :12.0
[01.04.2019 16:32:12] [info] Database Dialect:3
....
[02.04.2019 11:03:51] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[02.04.2019 11:03:51] [summary] [TESTS]
[02.04.2019 11:03:51] [summary] EXECUTED      : 695367
[02.04.2019 11:03:51] [summary] SUCCEEDED     : 695351
[02.04.2019 11:03:51] [summary] FAILED        : 0
[02.04.2019 11:03:51] [summary] WITH WARNINGS : 16 [ 32 warning(s) ]
[02.04.2019 11:03:51] [summary] 
[02.04.2019 11:03:51] [summary] - - - - - - - - - - - - - - - - - - - - - -
[02.04.2019 11:03:51] [summary] [TEST TIMES]
[02.04.2019 11:03:51] [summary] REAL          : 2645724911777 [3 day(s)01:29:32.4911777]
[02.04.2019 11:03:51] [summary] USER          : 665079062500  [18:28:27.9062500]
[02.04.2019 11:03:51] [summary] KERNEL        : 286460156250  [07:57:26.0156250]
[02.04.2019 11:03:51] [summary] TOTAL         : 951539218750  [1 day(s)02:25:53.9218750]
[02.04.2019 11:03:51] 
[02.04.2019 11:03:51] [TEST HEAP] Test heap is empty
[02.04.2019 11:03:51] [TEST HEAP] Validate ... OK
[02.04.2019 11:03:51] [TEST HEAP] Destroy ... OK
[02.04.2019 11:03:51] 
[02.04.2019 11:03:51] [summary] ------------------------------------------- [PROCESS INFORMATION]
[02.04.2019 11:03:51] [summary] [VIRTUAL MEMORY]
[02.04.2019 11:03:51] [summary] 
[02.04.2019 11:03:51] [summary] PRIVATE BYTES      : 12816 KB       [12MB 528KB]
[02.04.2019 11:03:51] [summary] PEAK PRIVATE BYTES : 12662564 KB    [12GB 77MB 804KB]
[02.04.2019 11:03:51] [summary] VIRTUAL SIZE       : 4343900 KB     [4GB 146MB 92KB]
[02.04.2019 11:03:51] [summary] PAGE FAULT COUNT   : 121652151
[02.04.2019 11:03:51] [summary] 
[02.04.2019 11:03:51] [summary] - - - - - - - - - - - - - - - - - - - - - -
[02.04.2019 11:03:51] [summary] [HANDLES]
[02.04.2019 11:03:51] [summary] 
[02.04.2019 11:03:51] [summary] HANDLES            : 175
[02.04.2019 11:03:51] [summary] 
[02.04.2019 11:03:51] [summary] - - - - - - - - - - - - - - - - - - - - - -
[02.04.2019 11:03:51] [summary] TOTAL ERRORS  : 0
[02.04.2019 11:03:51] [summary] TOTAL WARNINGS: 32
[02.04.2019 11:03:51] [summary] FULL PASSES   : 1
[02.04.2019 11:03:51] [summary] GEN TESTS     : 8293105

KERNEL-time почти на два часа увеличился. С «06:09:26» до «07:57:26».

Вот еще данные для 1709:

[18.03.2019 13:43:29] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[18.03.2019 13:43:29] [summary] [TESTS]
[18.03.2019 13:43:29] [summary] EXECUTED      : 695367
[18.03.2019 13:43:29] [summary] SUCCEEDED     : 695349
[18.03.2019 13:43:29] [summary] FAILED        : 0
[18.03.2019 13:43:29] [summary] WITH WARNINGS : 18 [ 38 warning(s) ]
[18.03.2019 13:43:29] [summary] 
[18.03.2019 13:43:29] [summary] - - - - - - - - - - - - - - - - - - - - - -
[18.03.2019 13:43:29] [summary] [TEST TIMES]
[18.03.2019 13:43:29] [summary] REAL          : 2649075169436 [3 day(s)01:35:07.5169436]
[18.03.2019 13:43:29] [summary] USER          : 691355468750  [19:12:15.5468750]
[18.03.2019 13:43:29] [summary] KERNEL        : 238955312500  [06:38:15.5312500]
[18.03.2019 13:43:29] [summary] TOTAL         : 930310781250  [1 day(s)01:50:31.0781250]
[08.03.2019 18:27:48] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[08.03.2019 18:27:48] [summary] [TESTS]
[08.03.2019 18:27:48] [summary] EXECUTED      : 697418
[08.03.2019 18:27:48] [summary] SUCCEEDED     : 697399
[08.03.2019 18:27:48] [summary] FAILED        : 0
[08.03.2019 18:27:48] [summary] WITH WARNINGS : 19 [ 38 warning(s) ]
[08.03.2019 18:27:48] [summary] 
[08.03.2019 18:27:48] [summary] - - - - - - - - - - - - - - - - - - - - - -
[08.03.2019 18:27:48] [summary] [TEST TIMES]
[08.03.2019 18:27:48] [summary] REAL          : 2709158575325 [3 day(s)03:15:15.8575325]
[08.03.2019 18:27:48] [summary] USER          : 715683906250  [19:52:48.3906250]
[08.03.2019 18:27:48] [summary] KERNEL        : 245707812500  [06:49:30.7812500]
[08.03.2019 18:27:48] [summary] TOTAL         : 961391718750  [1 day(s)02:42:19.1718750]

KERNEL-time меньше 7 часов.

А у сборки 1809 — почти 8 часов.

Сдается мне, система таки стала немного медленней работать.

Я потом (если будет не лень) еще закину сюда свежие данные о производительности 1809.

IBProvider build 31154

Выполнена реорганизация кода.

Суть реорганизации — перемещение плюсовых конструкций в общее пространство имен (ibp).

До этого код был сгруппирован в несколько независимых глобальных пространств.

Я даже вспомнил причину по которой появился этот небольшой бардак с пространств имен — компилятор от BCB5, на котором велась разработка до 2008 года, хреново обрабатывал вложенные namespace. Поэтому приходилось извращаться. Или, если говорить прямо — калечить исходный код.

И да. Изменения протестированы — все тип топ:

Process ID: 26316

[TEST HEAP] Initialize ... OK

[22.03.2019 21:33:01] [ExecuteTests] CommandLine:

target\ibp_oledb_test_vc15_x64_Release.exe  /thread_count 4 /log_file_prefix fb30_fb.direct_ram_w64_d3 /auto /log_dir ..\_log\__ReleaseTests1s\ /new_db_location "inet4://localhost/d:\database\ram\" /cn_str "provider=LCPI.IBProvider.5.Private.vc15.release;location=inet4://localhost/d:\database\ram\ibp_test_fb30_d3_2.gdb;user id=GAMER;password=vermut;ctype=win1251;temp_file_dir=d:\database\ram\temp;dbclient_type=fb.direct;icu_library=icuuc52.dll" /oledb_svc_cmp "LCPI.OleDbServices.DataInitManager.Local.1.Private.vc15.debug"   /test component* /test ds* /test sess* /test odbc* /test cmd* /test column* /test array.write* /test array.read* /test array*001* /test icr* /test rowset* /test schema.002* /test schema.003* /test schema.004* /test schema.005* /test schema.008* /test schema.009* /test schema.010* /test schema.011* /test octet* /test blob*large*65536*1251* /test array*1251* /test charset*1251* /test *4053* /test *wchars_in_utf8_symbol*

[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [component*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [ds*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [sess*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [odbc*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [cmd*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [column*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [array.write*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [array.read*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [array*001*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [icr*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [rowset*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.002*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.003*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.004*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.005*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.008*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.009*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.010*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [schema.011*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [octet*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [blob*large*65536*1251*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [array*1251*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [charset*1251*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [*4053*]
[22.03.2019 21:33:01] [ExecuteTests] Test Mask  : [*wchars_in_utf8_symbol*]

[22.03.2019 21:33:01] [info] Provider DLL    :lcpi.ibprovider_v5_vc15_w64_prof_i.dll
[22.03.2019 21:33:01] [info] Provider Version:5.2.0.31153
[22.03.2019 21:33:01] [info] Server Name     :Firebird
[22.03.2019 21:33:01] [info] Server Version  :3.0.5.33112
[22.03.2019 21:33:01] [info] Client Name     :LCPI.IBProvider.RemoteFB
[22.03.2019 21:33:01] [info] Client Version  :5.2.0.31153
[22.03.2019 21:33:01] [info] Database ODS    :12.0
[22.03.2019 21:33:01] [info] Database Dialect:3
[22.03.2019 21:33:01] [info] ConnectionString:

provider=LCPI.IBProvider.5.Private.vc15.release;location=inet4://localhost/d:\database\ram\ibp_test_fb30_d3_2.gdb;user id=GAMER;password=vermut;ctype=win1251;temp_file_dir=d:\database\ram\temp;dbclient_type=fb.direct;icu_library=icuuc52.dll

....

[23.03.2019 13:45:28] [summary] ------------------------------------------- [SUMMARY INFORMATION]
[23.03.2019 13:45:28] [summary] [TESTS]
[23.03.2019 13:45:28] [summary] EXECUTED      : 695367
[23.03.2019 13:45:28] [summary] SUCCEEDED     : 695341
[23.03.2019 13:45:28] [summary] FAILED        : 0
[23.03.2019 13:45:28] [summary] WITH WARNINGS : 26 [ 45 warning(s) ]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] [TEST TIMES]
[23.03.2019 13:45:28] [summary] REAL          : 2316625873465 [2 day(s)16:21:02.5873465]
[23.03.2019 13:45:28] [summary] USER          : 655046718750  [18:11:44.6718750]
[23.03.2019 13:45:28] [summary] KERNEL        : 221669375000  [06:09:26.9375000]
[23.03.2019 13:45:28] [summary] TOTAL         : 876716093750  [1 day(s)00:21:11.6093750]
[23.03.2019 13:45:28] 
[23.03.2019 13:45:28] [TEST HEAP] Test heap is empty
[23.03.2019 13:45:28] [TEST HEAP] Validate ... OK
[23.03.2019 13:45:28] [TEST HEAP] Destroy ... OK
[23.03.2019 13:45:28] 
[23.03.2019 13:45:28] [summary] ------------------------------------------- [PROCESS INFORMATION]
[23.03.2019 13:45:28] [summary] [VIRTUAL MEMORY]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] PRIVATE BYTES      : 13236 KB       [12MB 948KB]
[23.03.2019 13:45:28] [summary] PEAK PRIVATE BYTES : 12651096 KB    [12GB 66MB 600KB]
[23.03.2019 13:45:28] [summary] VIRTUAL SIZE       : 155424 KB      [151MB 800KB]
[23.03.2019 13:45:28] [summary] PAGE FAULT COUNT   : 124775849
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] [HANDLES]
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] HANDLES            : 158
[23.03.2019 13:45:28] [summary] 
[23.03.2019 13:45:28] [summary] - - - - - - - - - - - - - - - - - - - - - -
[23.03.2019 13:45:28] [summary] TOTAL ERRORS  : 0
[23.03.2019 13:45:28] [summary] TOTAL WARNINGS: 45
[23.03.2019 13:45:28] [summary] FULL PASSES   : 1
[23.03.2019 13:45:28] [summary] GEN TESTS     : 8293105

🙂

Правила разработки программного обеспечения

Обнаружил у себя в книжном шкафу сабжевую книжку. Не помню когда я её купил.

Перечитал по диагонали. Нашел внутри чек — июль 2007-го.

Автор — мужик, руководивший разработкой Visual C++ 1.0.

Описаны три стадии разработки (коробочного) ПО — начало, процесс, выпуск.

Тезисы Правила

12. Выпускайте обновления (новые версии) так часто, как только это возможно.

17. Бизнес ПО — отношения, а не продажа.

13. Не оглядывайтесь назад.

4. Не устанавливайте бит ничтожества.

32. Регулярно проводите сборку продукта.

40. Понравилось: «производитель собачьего корма должен есть свой собственный корм для собак». Приписывают Балмеру. Мне еще нравится другое его высказывание — «Над Windows мы пахали как лошади».

Правила предполагают командную разработку (тараканы в моей голове повернулись в сторону голоса). Относительно много плача про сложности выпуска качественного ПО в срок (тараканы пожали плечами).

В целом, интересно заново перечитать и сравнить полученную информацию с собственным опытом.

Тестовая сборка IBProvider v5.2.0.30604

Привет всем.

Пишу в заголовке «тестовая сборка …», а сам думаю «тестовая, угу».

В сборке удалены v5.2.0.30604 костыли устаревшие свойства инициализации и набора рядов «ado_exec_sp», «odbc_call_sp», «schema_sp_params», «check_cn_status».

После того как удалил, мелькнула мысль — «может надо было их сохранить и оставить только одно допустимое значение?».

Впрочем, умерла так умерла. Этот мусор будет только вводить в заблуждение.

.Net provider v1.11

Доступно новое обновление нашего ADO.NET провайдера — версия 1.11.

Это то самое изменение, которое спровоцировало выпуск IBProvider v5. Самое смешное, что ничего такого из v5 здесь не используется. Новый .NET провайдер будет работать и с IBProvider v3. Просто не надо было очень сильно задумываться над тем как все работает.

Но, как говорится, все что ни делается, все к лучшему. IBProvider v5 закрыл вопросы, которые у других даже не появлялись.

В процессе написания новостей про v1.11 заглянул на страницу со списком информационных свойств подключения и для себя отметил, что надо было сразу добавить в DataSourceInformation публикацию о размере страницы базы данных и версии ODS базы данных. В ближайшее время добавлю. IBProvider v7 для этого выпускать не понадобится.

«Data Link» и «Integrated Security»

Внезапно обнаружил, что в стандартном диалоге «Data Link» для выбора OLE DB провайдера и настройки подключения починили поддержку свойства «Integrated Security». Раньше для выключения интегрированной аутентификации надо было в PropertyBag сохранять специальное значение «NONE», потому что EMPTY (пустое значение) конвертировалось в пустую строку.

Теперь можно писать EMPTY — не конвертируется. Это на Windows 10.

Я так удивился, что снова проверил на древней XP SP2 — там действительно EMPTY конвертируется в пустую строку. Поэтому специальное значение «NONE» пока будет жить.

Видать нарвались на собственные грабли и починили.

Но, для остальных свойств все осталось по прежнему!

Если писать в PropertyBag EMPTY-значение, то обратно он возвращает пустую строку.

Повбывав бы.

Вести с полей

Сегодня, в порядке эксперимента, упаковывал файлы с логами тестов релиза IBProvider v5.

Потом подумал — «не пропадать же добру» и выгрузил их наружу 🙂

Ссылка действительна в течении двух недель.

Передача пароля по сети

Смотрю на код (в собственном клиенте для FB) упаковки пароля в буфер, который будет отправлен на сервер:

 m_dpb.AppendMbcString
  (isc_api::ibp_isc_dpb_password_enc,
   L"isc_dpb_password_enc",
   dpb_type::mbc_str_box_type(password_b,password_sz));

И думаю…

1. Пароль передается в «зашифрованном» виде.

2. В FB3 с его SRP, шифрование «поинтереснее».

3. Но пришлось libtommath затащить в код.

4. А в родном NetProvider для FB это «затаскивание» не асилили, поэтому SRP оно не поддерживает.

5. А интересно — «isc_dpb_password_enc» хотя бы используется?

6. Нет, не используется. Пароль передается как есть (через isc_dpb_password):

protected override void SendAttachToBuffer(DatabaseParameterBuffer dpb, string database)
{
	XdrStream.Write(IscCodes.op_attach);
	XdrStream.Write(0);
	if (!string.IsNullOrEmpty(Password))
	{
		dpb.Append(IscCodes.isc_dpb_password, Password);
	}
	dpb.Append(IscCodes.isc_dpb_utf8_filename, 0);
	XdrStream.WriteBuffer(Encoding.UTF8.GetBytes(database));
	XdrStream.WriteBuffer(dpb.ToArray());
}

7. Забавно, забавно …

Вести с полей посттестирования v5

Решил прогнать на кодовой базе v5 модульные тесты встроенного клиента к Firebird. В качестве жертв были выбраны FB3.0.4 и FB2.5.6.

100 лет уже эти тесты не запускал — ограничивался основными тестами. Они тоже неплохо так разные варианты перебирают.

В процессе перезапуска тестов на FB2.5.6 (дорабатывал их устаревший код) нарвался на тупняк сервера со списками запросов. Ну, думаю, сейчас тройку замучаю и если на ней тест «RemoteFB.WORK.013.StmtAllocate.v2.ptype__lazy_send.011.check_release_of_dropped_stmts» тоже будет тупить — держите меня семеро.
(далее…)