Релиз IBProvider v3.46

Привет всем.

Завершен процесс релиза 46-обновления третьей версии IBProvider — опубликованы новости.

С моей точки зрения, в этом выпуске самое главное — внутренние изменения, связанные с реорганизацией исходного кода. Хотя конечным пользователя абсолютно безразлично.

Пока перестраивал код, в голову пришли следующие мысли:

1. Сначала программист на C++ больно и мучительно приходит к использованию счетчиков ссылок для управления временем жизни объектов размещаемых в куче.

2. Потом до него доходит, что счетчиков может быть несколько.

3. И наконец, реализации интерфейсов со счетчиками ссылок необязательно размещать в куче. Они могут быть статическими, а их add_ref/release ничего не делают.

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

Нагрузочное тестирование SuperClassic FB3 на Windows 10

Следуя настоятельным рекомендациям (по поводу CORE-5632), занялся очень мутной работой — тестированием оперативной памяти. Каждой планки (8x16GB) по отдельности.

В качестве тестов — сначала (для проформы) MemTest86+ 5.01.

Потом, уже под Windows 10 Pro (1703), группа тестов провайдера, которая использовалась (успешно) для выявления битой памяти ноутбука. FB3 был сконфигурирован как SuperClassic — ну, чтобы памяти побольше ел.

Тесты запускались в 20 потоков. Каждый запуск начинался с чистой базы.
(далее…)

InterBase 2017 Update 1

На почту пришло уведомление об выпуске первого обновления InterBase 2017.

Я прям заинтересовался — неужели починили багу с savepoint, которая уже надоела и я решил сообщить им о ней.

Нет, не осилили.

Зато обнаружил в списке исправленных ошибок такую интересную запись:

INTB-3287 Transaction Inventory Page cleanup could cause database corruption in extreme case.

Если я все правильно догоняю, то это CORE-5415 🙂

Вести с полей

Привет всем.

На сайт загружен новый триал IBProvider, сборку которого (3.45.0.26658) планируется довести до релиза.

В новой сборке откорректирована поддержка UTF8. Ранее, UTF8 символ отображался на два UTF16 (WCHAR) символа. Это обеспечивало поддержку всех допустимых символов UTF8, но создавало определенные трудности с определение максимального количества символов в колонке/параметре. Эти трудности начали приносить невыносимые страдания одному из наших последних клиентов, поэтому я решил вернуть отношение один UTF16 символ на один UTF8 символ и добавить свойство инициализации wchars_in_utf8_symbol, которое позволяет вернуться к двум UTF16 символам на один UTF8 символ.

Все остальные изменения в провайдере связанны с реорганизацией и ревизией кода.

Первое. Я изничтожил свои велосипеды (изобретенные в 2000-ом году) вокруг std::vector. И начал использовать этот класс как есть. Бинарники немного увеличились в размерах (максимум на 0.5%), производительность вроде не просела.

Второе. Некоторые внутренние объекты преобразованы из динамических в статические. Для такой махины как IBProvider, такая оптимизация мало на что повлияет. Но тем не менее.

И третье. Я тут начал читать (догреб до середины) «Эффективный и современный C++» Скотта Мейерса. Пришел к выводу, что в настоящий момент просто глупо беспокоиться за совместимость со старыми компиляторами (которые по факту я уже и не использую) и пора уже двигаться вперед. Move-трюки я уже давно начал использовать, хотя и прятал эти конструкции от старых компиляторов. Теперь начал использовать новые штуки (типа emplace_back) из STL. Без всяких условностей. Я рад что это произошло.

IBProvider v3.44

Привет всем.

В экстренном порядке пришлось выпустить версию IBProvider v3.44.

Вчера, разгребая результаты выполнения тестов для InterBase 2017, обнаружил ошибку с NULL-значениями в IN-параметрах с типом BLOB.

Я даже посмотрел в истории — когда конкретно эта бага была внесена в код.

11 ноября 2016 года 14:54:35.

Судя по бортовому журналу, в этот день к этому моменту у меня уже был «отходняк» — был выпущен провайдер с собственным клиентом к FB3 и осилена покупка Windows 10 на новую рабочую лошадку.

Кстати

Сегодня стукнуло семь лет с момента релиза третьей версии IBProvider.

Семь лет разрабатывался и уже столько же доводится до ума.

У всех причастных к этому процессу, однозначно, есть повод улыбнуться.

Про ICU

Как известно, в Firebird 2.1, для работы с кодовыми страницами, была добавлена поддержка библиотеки ICU. Изначально — версия 3.0 (FB2.1, FB2.5). FB3 работает с ICU 5.2.

Компоненты доступа, если они претендуют на «нативе» поддержку Firebird, тоже должны уметь работать с ICU. Так что приходится с этим возиться.

На текущий момент, IBProvider поддерживает ICU3.

При тестировании провайдера с FB3 и изучении хедеров ICU 5.2, обнаружилась пара новых забавных вещей.
(далее…)

Вести с полей

Всем привет.

Из личных кабинетов уже можно прямо сейчас загрузить инсталляторы «LCPI OLE DB Services» и обновленных IBProvider, ADO.NET Provider. Подробное описание будет, как обычно, немного позднее.

Вкратце про последние две вещи

В IBProvider исправлена ошибка в 64-битной сборке.

В ADO.NET провайдере появилась новая компонента «OleDbServices» для явного определения COM-объекта с сервисами OLE DB.

Registration Free COM и OLE DB

Все что ни делается, все к лучшему …

Предыстория
В конце лета 2016-го, мой любимый рабочий ноутбук начал выносить мозг внезапными выключениями. К октябрю это окончательно задрало и я решил что пришло время осуществить свою мечту притворить в реальность мысли о новом рабочей лошадке. Которая сможет заменить и ноутбук и десктоп, собранный в 2008 году. В начале ноября новый компьютер был собран. Его дури хватило на то, чтобы за четыре дня зарелизить собственного клиента для FB3 🙂

После этого началась настройка новой системы для ежедневной рутинной работы.

По теме
Основная проблема, которая сопровождает разработку и тестирование IBProvider-a на одном компьютере — это конфликты регистрационных записей в реестре Windows. Нужно постоянно помнить, какая сборка сейчас зарегистрирована. Это напрягает и периодически приводит к ошибкам типа «тесты подхватили не ту DLL».

Решение у этой проблемы уже давно есть — в манифест исполняемого файла (EXE) тестов следует добавить записи, позволяющие создавать COM-объекты с использованием технологии «Registration Free COM». Добавил.

И тут внезапно оказалось, что стандартный пул подключений OLE DB не поддерживает провайдеры «зарегистрированные» таким образом. Создавать-то он их может. Но подключения не кэширует — ему нужны дополнительные данные о провайдере из реестра, которых, понятное дело, там нет.

Грязно выругавшись, попутно вспомнив про родителей баги этой стандартной компоненты, я начал пилить свою реализацию пула подключений.

Потратив на это занятие для умалишенных чуть более трех месяцев (захотелось сделать все по-уму), вернулся к теме, ради которой все затевалось — изоляция тестов.
(далее…)

Год с момента релиза FB3

Год назад, 19 апреля 2016 года, был выпущен релиз FB3 🙂

Сейчас, через год, он (похоже) начал стабильно работать.
(далее…)