Большое тестирование IBProvider [release]

Всем привет.

Вчера закончилось большое тестирование IBProvider v5.19 (vc16, x64, релизная сборка).

Потребовалось 32 дня.

Все тип-топ.
(далее…)

Большое тестирование IBProvider [debug]

Привет всем.

Сегодня доехало до конца большое тестирование IBProvider v5.19. Главное отличие от предыдущих забегов — прогонялись отладочные сборки провайдера и пула подключений.

7 миллионов тестов за 42.5 дня на 10-ядерном процессоре.

Все тип-топ.

Конфигурация

  • Intel 6950x [10C/20T], RAM 128GB
  • База и TEMP на RAM диске (SoftPerfect)
  • IBProvider v5.19.0.35449
  • LCPI OLE DB Services v1.16.0.924
  • LCPI Thread Pool v2.1.1.310
  • Firebird v3.0.6.33294 (SS, x64, Win)
  • Win10 x64 Pro 1909

Подключение к базе через собственного клиента для FB (dbclient_type=fb.direct) и TCP/IP (INET4). Без сжатия данных — не стал рисковать.

Каждый час запускалась принудительная сборка мусора.

(далее…)

SSIS в картинках. Динамическая строка подключения

Два пользователя напрягли вопросом указания динамических значений некоторых параметров строки подключения в SSIS пакете.

Пришлось вникать в эту тему.

Оказалось все достаточно просто — нужно целиком формировать строку подключения. Причем её можно собирать из нескольких частей.

Думаю, следующая картинка все доходчиво объясняет:

У нас тут три переменных.

В переменных Variable_LOC и Variable_CN_STR1 заданы явные значения.

В переменной Variable_CN_STR значение формируется динамически через выражение:

location="+ @[User::Variable_LOC] +";"+@[User::Variable_CN_STR1]

В объекте подключения RAM.GAMER (в моем случае это OLE DB подключение) добавляем Expression определяющее свойство ConnectionString и указываем его значение как @[User::Variable_CN_STR].

Вести с полей

Всех с бодрым началом лета.

В IBProvider проведена очередная серия обновлений исходного кода. Устранил вещи, об которые начал спотыкаться мозг.

Основная суть — зачистка и переработка интерфейсов принимающих строковые значения. Если совсем просто, то вместо «const char*» и «const std::string&» теперь используется structure::t_const_str_box (аналог std::string_view).

В процессе переработки чуть было не наступил на грабли. Так что, в некоторых случаях, методы, принимающие указатели вида «const char*», пришлось сохранить.

После всех этих изменений, бинарник провайдера (x64) потяжелел приблизительно на 40KB. Это было ожидаемо, но все равно неприятно. Назад откатывать не стал — оптимизировал другие конструкции (-10KB).

Судя по результатам тестирования, функциональность не поломалась. Общая производительность тоже не просела. Даже стало немного быстрее:

Было

[16.05.2020 15:51:13] [summary] [TESTS]
[16.05.2020 15:51:13] [summary] EXECUTED      : 703686
[16.05.2020 15:51:13] [summary] SUCCEEDED     : 703630
[16.05.2020 15:51:13] [summary] FAILED        : 0
[16.05.2020 15:51:13] [summary] WITH WARNINGS : 56 [ 82 warning(s) ]
[16.05.2020 15:51:13] [summary] 
[16.05.2020 15:51:13] [summary] - - - - - - - - - - - - - - - - - - - - - -
[16.05.2020 15:51:13] [summary] [TEST TIMES]
[16.05.2020 15:51:13] [summary] REAL          : 4191257823522 [4 day(s)20:25:25.7823522]
[16.05.2020 15:51:13] [summary] USER          : 822947500000  [22:51:34.7500000]
[16.05.2020 15:51:13] [summary] KERNEL        : 337996562500  [09:23:19.6562500]
[16.05.2020 15:51:13] [summary] TOTAL         : 1160944062500 [1 day(s)08:14:54.4062500]

Стало

[02.06.2020 06:05:50] [summary] [TESTS]
[02.06.2020 06:05:50] [summary] EXECUTED      : 703686
[02.06.2020 06:05:50] [summary] SUCCEEDED     : 703628
[02.06.2020 06:05:50] [summary] FAILED        : 1 [ 2 error(s) ] <--- привет от FB.
[02.06.2020 06:05:50] [summary] WITH WARNINGS : 57 [ 75 warning(s) ]
[02.06.2020 06:05:50] [summary] 
[02.06.2020 06:05:50] [summary] - - - - - - - - - - - - - - - - - - - - - -
[02.06.2020 06:05:50] [summary] [TEST TIMES]
[02.06.2020 06:05:50] [summary] REAL          : 3935194767393 [4 day(s)13:18:39.4767393]
[02.06.2020 06:05:50] [summary] USER          : 800231406250  [22:13:43.1406250]
[02.06.2020 06:05:50] [summary] KERNEL        : 325012343750  [09:01:41.2343750]
[02.06.2020 06:05:50] [summary] TOTAL         : 1125243750000 [1 day(s)07:15:24.3750000]

Все это ускорение, конечно, условно. Но все равно приятно.

Если все сложится благоприятно (основное тестирование закончится только завтра), то новое обновление провайдера (v5.18) будет выложено на этой неделе.

Немного статистики

На днях провел небольшую экскурсию в свое прошлое и подвел итоги.

Вкратце.

1. Общий объем исходных кодов рабочих проектов, с которыми приходится регулярно иметь дело, составляет около 80MB.

2. Половину составляют тесты.

А я еще чертыхаюсь — что так все стало сложно и тяжко? 🙂

Регулярные выражения

Вчера весь день доводил до ума одну конструкцию IBProvider, которая была сделана одной из первых в его третьей версии. И краем глаза увидел код вида:

 :inherited(NULL)
 ,m_ProviderClassID(ProviderClassID)
 ,m_spData(pData)
 ,m_spUnkOwner(pUnkOwner)
{
 assert(m_spData);
 assert(m_spUnkOwner);

Непорядок, подумал я. Надо бы задействовать structure::not_null_ptr для подсказки смарт-указателям:

 ,m_spData(structure::not_null_ptr(pData))
 ,m_spUnkOwner(structure::not_null_ptr(pUnkOwner))

Но решил не отвлекаться.

К вечеру, а тем более сегодня с утра, уже не мог вспомнить — ГДЕ ЭТО Я ВИДЕЛ???

Чертыхаясь, пришлось осваивать регулярные выражения.

С использованием справок, онлайн-тестеров и такой-то матери, осилил выражение — (,m_sp)[\w]*[(][p].

Нашлось даже больше чем ожидал:

I am an engineer a regular expression expert! 🙂

Хорошая статья на Хабре

Почему компания «Интел» делает ставку в разработке чипов на гений Джима Келлера?

Их отличительной чертой станет разделение основных функций, что позволит компании улучшать будущие микропроцессоры по блокам.

SSIS. Перекачка из MS SQL (OLE DB) в Firebird

Надо бы где-то сохранить нюансы связанные с SSIS, remote MSSQL, OLE DB и транзакциями.

1. Настроить DTC на обоих компьютерах.

Control Panel\All Control Panel Items\Administrative Tools\Component Services

Обращаем внимание на «No Authentication Required».

2. В FireWall на обоих компьютерах нужно разрешить DTC.


Наверное, в диких условиях так делать нельзя.

Но для тестовой инфраструктуры, когда нужно быстро разобраться с проблемой ленивого пользователя IBProvider — самое оно.

SSIS и «LCPI ADO.NET Data Provider for OLE DB»

Выложил новое обновление .NET провайдера, в котором реализован workaround костыль для костыля в SSIS — v1.20.

Так что теперь SSIS может закачивать данные в FB/IB через lcpi.data.oledb->IBProvider.

Руководство к действию в картинках.

Araxis Merge 2020.5368

Есть три вещи, в которых я провожу 90% времени во время создания кода (порядок произвольный):

1. Visual Studio 2019 CE
2. WinCVS
3. Araxis Merge Pro

Первые две вещи — бесплатные.

Araxis куплен и лицензия многократно продлена.

Если вы пользуетесь этой штукой, то каждый раз, когда нажимаете на кнопочку «закрыть» на вкладке с сравнением файлов, можете мысленно вспоминать меня (ага). Это я их задолбал и они её добавили.

В последнем обновлении появилась еще одна «мегафича» — подсветка фрагментов текста, идентичных выделенному блоку.

Я их наверное лет шесть слезно просил добавить эту штуку.

Теперь вот в некотором замешательстве, потому что новых идей по улучшению этого инструмента у меня нет 🙂