В 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.
Я смотрю на это дело в древнерусской тоске.
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. Впрочем, таких изменений за последние годы было такое количество, что уже не страшно о них думать.
Привет всем.
На сайте 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 провайдера 🙂
Привет всем.
На днях, изучая результаты нагрузочного тестирования очередного выпуска IBProvider-a (v3.19), обнаружил что многопоточная проверка 32-х битной сборки закончилась с огромным количеством ошибок выделения памяти. По всей видимости, после последних изменений в тестовой базе данных и тестовой системе, стандартных 2GB адресного пространства, которые отводятся пользователю в 32-х битном процессе, стало явно маловато. (далее…)
Dmitry Kovalenko on 12 января, 2014 | 1 Comment
Привет всем.
Одной из самых технологически сложных программ в моей прошлой жизни был проект репликатора, который свел воедино другие подсистемы (базу данных, скрипты, IBProvider, поиск по «текстовому индексу») основного проекта — управление базой данных для регистрации сделок с недвижимостью. (далее…)
Всем привет.
Как я тут уже упоминал — 16 октября было запущено третье «большое тестирование» IBProvider-а. Второе было весной текущего года.
«Добежать» до финиша опять не удалось. Однако в этот раз из-за проблем с Firebird. Судя по всему, 16 ноября (то есть через месяц после старта) произошло зацикливание внутри движка.
Так что, если у вас есть какие-то мысли по поводу использования FB в «высоконагруженных» системах, почитайте. Думаю, здесь есть над чем задуматься. (далее…)
Привет всем.
На сайт IBProvider-a загружены дистрибутивы нового триала — 3.18.0.15608. Основные изменения:
- Улучшена работа в качестве MSSQL Linked Server-а.
- Переезд на компилятор 2012 студии.
А теперь, об этих двух пунктах поподробнее. (далее…)
Привет всем.
В старые, добрые времена (когда …) было нормой использовать команду «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 2.5 появилась функция отмены текущей операции с сервером — fb_cancel_operation. Штука, без сомнения, реально полезная. Но как показывает практика — ей нужно уметь пользоваться. Иначе, как показано в данном примере, можно запросто прерывать чужую работу.
Собственно говоря, моя текущая мысль не о том, что кто-то пишет в стиле «и так сойдет». А о другом. Весьма мутном. (далее…)
Привет всем.
На сайт загружен новый инсталлятор для .Net провайдера.
Ключевые изменения:
- Групповое изменение настроек (платформа/конфигурация)
- Установка в GAC
- Регистрация провайдера в machine.config
- Инсталлятор учитывает версии установленных .NET Framework