Привет всем.
Завершен процесс релиза 46-обновления третьей версии IBProvider — опубликованы новости.
С моей точки зрения, в этом выпуске самое главное — внутренние изменения, связанные с реорганизацией исходного кода. Хотя конечным пользователя абсолютно безразлично.
Пока перестраивал код, в голову пришли следующие мысли:
1. Сначала программист на C++ больно и мучительно приходит к использованию счетчиков ссылок для управления временем жизни объектов размещаемых в куче.
2. Потом до него доходит, что счетчиков может быть несколько.
3. И наконец, реализации интерфейсов со счетчиками ссылок необязательно размещать в куче. Они могут быть статическими, а их add_ref/release ничего не делают.
К моменту, когда я дошел до третьего пункта в IBProvider v3 была написана куча кода, который попадал под эту оптимизацию. Вот как раз часть этого прошлого и была откорректирована в новом выпуске.
Следуя настоятельным рекомендациям (по поводу CORE-5632), занялся очень мутной работой — тестированием оперативной памяти. Каждой планки (8x16GB) по отдельности.
В качестве тестов — сначала (для проформы) MemTest86+ 5.01.
Потом, уже под Windows 10 Pro (1703), группа тестов провайдера, которая использовалась (успешно) для выявления битой памяти ноутбука. FB3 был сконфигурирован как SuperClassic — ну, чтобы памяти побольше ел.
Тесты запускались в 20 потоков. Каждый запуск начинался с чистой базы.
(далее…)
На почту пришло уведомление об выпуске первого обновления InterBase 2017.
Я прям заинтересовался — неужели починили багу с savepoint, которая уже надоела и я решил сообщить им о ней.
Нет, не осилили.
Зато обнаружил в списке исправленных ошибок такую интересную запись:
INTB-3287 Transaction Inventory Page cleanup could cause database corruption in extreme case.
Если я все правильно догоняю, то это CORE-5415 🙂
Dmitry Kovalenko on 6 октября, 2017 | 1 Comment
Привет всем.
На сайт загружен новый триал 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.
Вчера, разгребая результаты выполнения тестов для InterBase 2017, обнаружил ошибку с NULL-значениями в IN-параметрах с типом BLOB.
Я даже посмотрел в истории — когда конкретно эта бага была внесена в код.
11 ноября 2016 года 14:54:35.
Судя по бортовому журналу, в этот день к этому моменту у меня уже был «отходняк» — был выпущен провайдер с собственным клиентом к FB3 и осилена покупка Windows 10 на новую рабочую лошадку.
Dmitry Kovalenko on 18 сентября, 2017 | 1 Comment
Сегодня стукнуло семь лет с момента релиза третьей версии IBProvider.
Семь лет разрабатывался и уже столько же доводится до ума.
У всех причастных к этому процессу, однозначно, есть повод улыбнуться.
Как известно, в Firebird 2.1, для работы с кодовыми страницами, была добавлена поддержка библиотеки ICU. Изначально — версия 3.0 (FB2.1, FB2.5). FB3 работает с ICU 5.2.
Компоненты доступа, если они претендуют на «нативе» поддержку Firebird, тоже должны уметь работать с ICU. Так что приходится с этим возиться.
На текущий момент, IBProvider поддерживает ICU3.
При тестировании провайдера с FB3 и изучении хедеров ICU 5.2, обнаружилась пара новых забавных вещей.
(далее…)
Dmitry Kovalenko on 17 июля, 2017 | 1 Comment
Всем привет.
Из личных кабинетов уже можно прямо сейчас загрузить инсталляторы «LCPI OLE DB Services» и обновленных IBProvider, ADO.NET Provider. Подробное описание будет, как обычно, немного позднее.
Вкратце про последние две вещи
В IBProvider исправлена ошибка в 64-битной сборке.
В ADO.NET провайдере появилась новая компонента «OleDbServices» для явного определения COM-объекта с сервисами OLE DB.
Все что ни делается, все к лучшему …
Предыстория
В конце лета 2016-го, мой любимый рабочий ноутбук начал выносить мозг внезапными выключениями. К октябрю это окончательно задрало и я решил что пришло время осуществить свою мечту притворить в реальность мысли о новом рабочей лошадке. Которая сможет заменить и ноутбук и десктоп, собранный в 2008 году. В начале ноября новый компьютер был собран. Его дури хватило на то, чтобы за четыре дня зарелизить собственного клиента для FB3 🙂
После этого началась настройка новой системы для ежедневной рутинной работы.
По теме
Основная проблема, которая сопровождает разработку и тестирование IBProvider-a на одном компьютере — это конфликты регистрационных записей в реестре Windows. Нужно постоянно помнить, какая сборка сейчас зарегистрирована. Это напрягает и периодически приводит к ошибкам типа «тесты подхватили не ту DLL».
Решение у этой проблемы уже давно есть — в манифест исполняемого файла (EXE) тестов следует добавить записи, позволяющие создавать COM-объекты с использованием технологии «Registration Free COM». Добавил.
И тут внезапно оказалось, что стандартный пул подключений OLE DB не поддерживает провайдеры «зарегистрированные» таким образом. Создавать-то он их может. Но подключения не кэширует — ему нужны дополнительные данные о провайдере из реестра, которых, понятное дело, там нет.
Грязно выругавшись, попутно вспомнив про родителей баги этой стандартной компоненты, я начал пилить свою реализацию пула подключений.
Потратив на это занятие для умалишенных чуть более трех месяцев (захотелось сделать все по-уму), вернулся к теме, ради которой все затевалось — изоляция тестов.
(далее…)
Год назад, 19 апреля 2016 года, был выпущен релиз FB3 🙂
Сейчас, через год, он (похоже) начал стабильно работать.
(далее…)