Yaffil FAQ

yaffil.ibase.ru

дата последнего обновления: 26.09.2002
FAQ содержит две секции - общие и технические вопросы.

Общие вопросы

1. что это вообще такое - Yaffil?

Код Yaffil базируется на исходном коде Firebird (который в свою очередь родился из Interbase 6 OpenSource). Первоначально Yaffil разрабатывался с целью проверить некие идеи по поводу ускорения работы Interbase. Потом было решено разрабатывать сервер и дальше, с целью удовлетворения нужд российских разработчиков.

2. почему Yaffil платный?

Развитие бесплатного ПО зависит только от желания его разработчиков. Сделав Yaffil платным мы обеспечиваем гарантии надежности и сопровождения, а также учет ваших пожеланий по функциональности сервера.

3. насколько Yaffil совместим с Interbase и Firebird?

Настолько, насколько это возможно. Borland с переводом 6.0 и 6.5 на платную схему (идентичную 5.x) перестал обновлять OpenSource-версию, поэтому как и что они делают в исходном коде - неизвестно. В таких случаях нам приходится реализовывать функциональность своими силами (если эта функциональность оправдана для большинства разработчиков). С Firebird ситуация много проще, т.к. мы работаем совместно с Firebird Team. Между нами нет конкуренции (см. пункт 4), есть нечто вроде "социалистического соревнования".

В версии Interbase 7 Borland сделал ряд изменений, в том числе ODS (дисковой структуры), которая уже привела к несовместимости баз данных и частично несовместимости клиентского интерфейса.

4. продается ли Yaffil за рубежом?

Нет, и не планируется. Мы ориентированы на разработчиков России и стран бывшего СССР. За рубежом работает Borland и Firebird.

5. Почему бета-версии выходят так часто?

Мы постоянно работаем над улучшением сервера. В общем случае бета-версии предназначены для бета тестеров. Даже те, кто не является бета-тестером, могут оперативно наблюдать за изменением и дополнением функциональности Yaffil.
Подписаться на бета-тестирование можно по email - beta-subscribe@yaffil.ruibase.ru.

6. Что такое протокол XNET?

Это "локальный" протокол, вместо того, который работает в IB/FB через shared memory. В отличие от обычного через XNET можно работать с сервером из сервисов. Также, запросы в разных коннектах через XNET выполняются параллельно (в обычном локальном коннекте - последовательно). Небольшой недостаток XNET состоит в том, что он работает несколько медленнее, чем локальный протокол IB/FB.

Технические вопросы

1. поставил Yaffil поверх Interbase (Firebird), а при открытии баз выдается сообщение про charset

В Yaffil добавлены кодировки кои8, кои8u и другие, поэтому библиотека gdsintl.dll должна быть обязательно именно от этой версии Yaffil.

2. Не работает локальный протокол (XNET)

Проверьте версию gds32.dll - если она не от Yaffil, то локальный протокол работать не будет. Крайне рекомендуется, чтобы версия gds32.dll совпадала с версией сервера Yaffil.

3. как поставить snapshot (только файлы)?

Схема установки идентична Interbase и Firebird - достаточно распаковать файлы в каталог с уже установленным IB/FB. Распаковывать нужно с подкаталогами, особое внимание обращать на замену файла gdsintl.dll (библиотека кодировок) и gds32.dll (клиентская часть).

Однако если на машине установленного IB/FB нет, или хочется иметь возможность откатиться на IB/FB обратно, то нужно действовать по следующей схеме:
(все операции с сервисами и instsvc проводятся только для WinNT, W2K, WinXP)
(если на машине нет IB/FB, пропустите пункты 2-4)
1. создайте каталог (например C:\YA), распакуйте туда zip с файлами (с опцией распаковки с подкаталогами)
2. остановите сервис IB/FB (если он запущен, включая guardian)
3.зайдите в подкаталог bin текущей установки IB/FB. Удалите информацию из registry и сервисов путем запуска
instsvc remove
instreg remove
4 . посмотрите в списке сервисов - не остались ли сервисы IB/FB. Если да, измените их режим старта в "ручной" (manual)
5 . зайдите в подкаталог c:\ya\bin и запустите
instreg install c:\ya
instsvc install c:\ya
6 . Откройте список сервисов. Установите запуск Yaffil SuperServer или Classic в нужный режим (auto или manual). Для Classic в сервисах прописывается процесс ibremote.exe, для SuperServer - ibserver.exe

! Не допускайте возможности, чтобы одновременно были запущены Yaffil Classic и IB/FB! При одновременном обращении к одной и той же базе данных обоими серверами это может вызвать повреждения базы данных.

Для возврата к IB/FB необходимо проделать те же операции, только наоборот, сначала для Yaffil, затем для IB/FB.

4. после установки Yaffil стал падать сервер или udf
(до этого IB или FB работали нормально)

Yaffil начиная со сборки 867 компилируется MSVC7. Это означает, что теперь используется сервисная библиотека msvcr7.dll, а не msvcrt.dll как раньше (msvc6). В этой библиотеке есть функция malloc, отвечающая за аллокирование памяти.

Таким образом, если ваши udf содержат фунции с free_it, которые напрямую аллокируют память вызовом функции из msvcrt, или наоборот, делают это правильно через ib_util.dll но от сервера IB или FB, в результате получается что ваша udf использует один менеджер памяти, а сервер - другой. Что и приводит ко всяким проблемам с работоспособностью сервера.

Убедитесь, что ваша функция использует вызов не malloc, а ib_util_malloc, и что ib_util.dll имеет версию Yaffil не ниже 865 сборки (а также что на компьютере нет других ib_util.dll, которые могут быть найдены операционной системой ранее правильной ib_util.dll).

5. на 95/98 приложение говорит "не могу открыть gds32.dll"

Поскольку начиная со сборки 867 Yaffil компилируется MSVC7 (см. выше пункт 4), gds32.dll требует не msvcrt.dll, а msvcr7, который в этих ОС нет (msvcrt.dll также нет в чистой Win95). Поместите msvcr7.dll из дистрибутива Yaffil либо рядом с gds32.dll, либо в каталог, указанный в PATH.


(c) Yaffil Team & iBase