Про новый объектный API FB3.

В devel’е Андриано обнаружил очередные (очевидные) грабли в новом объектном API следующей версии FB3:

subj: New API and virtual functions.
message: Accordingly to how new API works, where one can get a version and the virtual table is filled with possible non-existent methods, classes like TraceParamsImpl could not insert new virtual functions.

Года два назад, Андриано же обнаружил что в новом API может течь память. Казалось бы — как такое возможно?

Судя по темпам, через пару лет должны осознать охинею с управлением ресурсами. Когда захотят задействовать смарт-указатели для своих интерфейсов.

А еще через пару лет — задумаются о QueryInterface.

Я смотрю на это дело в древнерусской тоске.

IBProvider 3.19.2

Hello everyone! 🙂

На сайт IBProvider-a загружены дистрибутивы с новым выпуском OLEDB провайдера — 3.19.2.15885.

Внесено одно единственное изменение — отображение серверной (FB/IB) ошибки «unable to allocate memory from operating system» (код: isc_virmemexh=335544430L) на COM-ошибку E_OUTOFMEMORY.

В целом.
В настоящий момент основное направление разработки смещено в пользу ADO.NET провайдера. Даже не сколько самого ADO.NET провайдера, который уже формально устаканился, а его окружения. В частности — DDEX провайдер.

IBProvider же сейчас круглосуточно нарабатывает часы под тестовой системой. С начала этого года выявлено две баги (одна из них многопоточная) в самой тестовой системе и вышеобозначенная неточность с isc_virmemexh.

В добавок к «традиционному» тестированию, один раз погонял IBProvider на SSD диске — на нем он создавал свои временные файлы. Сама тестовая база была на HDD. Это было реально впечатляющее зрелище. И все отработало безукоризненно.

Серверная часть (FB 2.5.3.26717 SC x64) работает сносно — утечек ресурсов не наблюдается. Крашей нет. Несколько раз вылазила ошибка вида «page xxxxxxxxxx, page type 4 lock denied (216)». Тестовые базы потихоньку «опухают» в размере. Но это уже известная проблема, неоднократно здесь упоминавшаяся.

Наверное сейчас уже можно сказать здесь вслух — текущий выпуск IBProvider-а это то, что должно было быть релизом 3.0. Но к (моему) сожалению задержалось на три с половиной года. Реализация новых идей требует требует относительно крупных изменений и расширений базовых подсистем IBProvider-a. Впрочем, таких изменений за последние годы было такое количество, что уже не страшно о них думать.

Поддержка параллельных транзакций в ADO.NET провайдере.

Привет всем.

На сайте IBProvider-a доступен для скачивания инсталлятор с новыми сборками .NET провайдера — 1.0.0.1946.

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

После достаточно продолжительного размышления по поводу реализации этой функциональности, я пришел к выводу что надо просто создавать раздельные объекты OleDbConnection привязанные к одному COM-объекту подключения (OLEDB DataSource), но разным COM-объектам сессий (это OLEDB компоненты для управления транзакциями). По аналогии с решением для классического ADODB.

С этими «клонами» подключения можно без проблем работать в разных потоках — IBProvider обеспечивает всю необходимую синхронизацию.

Другие изменения.

1. Добавлен класс OleDbEnumerator. С его помощью можно перечислить OLEDB провайдеры зарегистрированные в системе.

2. Добавлен перегруженный метод OleDbConnection.GetSchema(string, object[]).

3. Переработана реализация OleDbConnectionStringBuilder. Это был самый первый класс который я реализовал в рамках .NET провайдера 🙂

Второе дыхание 32х бит.

Привет всем.

На днях, изучая результаты нагрузочного тестирования очередного выпуска IBProvider-a (v3.19), обнаружил что многопоточная проверка 32-х битной сборки закончилась с огромным количеством ошибок выделения памяти. По всей видимости, после последних изменений в тестовой базе данных и тестовой системе, стандартных 2GB адресного пространства, которые отводятся пользователю в 32-х битном процессе, стало явно маловато. (далее…)

Про репликацию

Привет всем.

Одной из самых технологически сложных программ в моей прошлой жизни был проект репликатора, который свел воедино другие подсистемы (базу данных, скрипты, IBProvider, поиск по «текстовому индексу») основного проекта — управление базой данных для регистрации сделок с недвижимостью. (далее…)

Большое тестирование #3

Всем привет.

Как я тут уже упоминал — 16 октября было запущено третье «большое тестирование» IBProvider-а. Второе было весной текущего года.

«Добежать» до финиша опять не удалось. Однако в этот раз из-за проблем с Firebird. Судя по всему, 16 ноября (то есть через месяц после старта) произошло зацикливание внутри движка.

Так что, если у вас есть какие-то мысли по поводу использования FB в «высоконагруженных» системах, почитайте. Думаю, здесь есть над чем задуматься. (далее…)

Новый триал IBProvider-a [сборка 15608]

Привет всем.

На сайт IBProvider-a загружены дистрибутивы нового триала — 3.18.0.15608. Основные изменения:

  • Улучшена работа в качестве MSSQL Linked Server-а.
  • Переезд на компилятор 2012 студии.

А теперь, об этих двух пунктах поподробнее. (далее…)

Коротко про регистрацию COM-объектов

Привет всем.

В старые, добрые времена (когда …) было нормой использовать команду «regsvr32.exe ComServer.DLL» для регистрации COM-объектов в реестре Windows.

Однако эти времена, походу, давно закончились с выходом Windows Vista.

Я, у себя на компьютере, дал себе полные права для обновления ветки реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Classes» и продолжаю заниматься этими грязными делами под обычным пользовательским аккаунтом.

Ахтунг:
1. Не пытайтесь это сделать с веткой «HKEY_CLASSES_ROOT».
2. Сделайте точку сохранения системы.
3. Лучше вообще не делать это.

Если ничего не трогать, то сейчас даже администратор компьютера не может выполнить «regsvr32.exe» — получит ошибку доступа. Нужно запускать из окружения с повышенными правами — то есть запускаем «cmd.exe» с правами администратора, а потом из этой консоли выполняем «regsvr32.exe».

Но в целом, повторюсь, все это теперь считается «неправильным» способом.

Тут вот еще обнаружилось (может показалось?) — если зарегистрировать IBProvider где нибудь в дебрях несистемного раздела «D:\Users\Dima\Work…», то «MSSQL Management Studio» отказывается создавать Linked Server. А если установить в Program Files — то все работает нормально.

Так что — все только через инсталлятор и в «Program Files».

Рекомендую использовать MSI-пакеты с установкой IBProvider-a. Цивилизованная, раздельная установка для 32-битного и 64-битного варианта. Кстати, эти пакеты сами создают все записи в реестре, без привлечения DllRegisterServer. И даже предоставляют дополнительные рычаги для этого процесса.

Exe-инсталляторы (созданы с помощью InnoSetup), тоже вполне подходят. Но, думаю — надо от них отказываться уже. Правда пока не знаю как это сделать наиболее безболезненно для пользователей. Надо наверное просто взять и отключить их 1 января 2014 года 🙂

Хотел написать об «отмене выполнения запросов в Firebird»… И написал.

Привет всем.

Как хорошо известно (в узких кругах) в Firebird 2.5 появилась функция отмены текущей операции с сервером — fb_cancel_operation. Штука, без сомнения, реально полезная. Но как показывает практика — ей нужно уметь пользоваться. Иначе, как показано в данном примере, можно запросто прерывать чужую работу.

Собственно говоря, моя текущая мысль не о том, что кто-то пишет в стиле «и так сойдет». А о другом. Весьма мутном. (далее…)

Новый инсталлятор для .NET провайдера

Привет всем.

На сайт загружен новый инсталлятор для .Net провайдера.


Новый инсталлятор для "LCPI .Net Provider for OleDb"

Ключевые изменения:

  1. Групповое изменение настроек (платформа/конфигурация)
  2. Установка в GAC
  3. Регистрация провайдера в machine.config
  4. Инсталлятор учитывает версии установленных .NET Framework