Форум » LetoDB, HbNetio. » Leto DB Server(продолжение) » Ответить

Leto DB Server(продолжение)

alkresin: Только что открыл на Sourceforge новый проект - Leto DB Server - https://sourceforge.net/projects/letodb Это мультиплатформенный ( Windows, Unix/Linux ) сервер баз данных, предоставляющий клиентским программам доступ к dbf/cdx файлам, находящимся на удаленном сервере ( можно и на локальном компьютере запускать - в отладочных целях ). В общем, как ADS :). Проект - на стадии разработки, не все даже базовые функции еще реализованы, до оптимизации дело еще не дошло. Но работает :). Крутится у меня на сервере несколько дней, подключал до 15 клиентов, пока не падает. Мои программы работают с ним нормально. Преимущества по сравнению с обычным файл-сервером: 1) Безопасность - базы могут быть в каталоге, недоступном для клиентских компьютеров - никто их случайно не удалит и не повредит. 2) Поскольку базы открываются серверной программой, а не клиентской, ее целостности ничего не грозит при случайном отключении клиентского компьютера. 3) значительное уменьшение сетевого траффика. 4) Должен быть, по идее, выигрыш в скорости. 5) Возможность контроля за пользователями с помощью утилиты manage ( можно придумать и другие формы контроля ). 6) Можно будет сделать транзакции, stored procedures на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

Pasha: Мне с одного клиента надо коннектиться ко многим серверам letodb, в связи с чем ограничение MAX_CONNECTIONS_NUMBER хотелось бы снять. Для этого надо динамически выделять память для letoConnPool. Это лучше всего делать вызовом hb_xrealloc. Но эта функция может переместить область памяти в другое место, и тогда pConnection в AREASTRU будет ссылаться на невыделенную память, что нехорошо. В связи с этим есть предложение: вместо ссылки в AREASTRU хранить индекс uiConnection в letoConnPool. Кстати, подобный возможный баг есть в harbour/contrib/rddsql: если память под s_pConnection перевыделяется, ссылка на pConnection в _SQLBASEAREA может вызвать gpf

Andrey: Pasha пишет: Мне с одного клиента надо коннектиться ко многим серверам letodb А разве так можно ? Что за задачи решаются таким образом ? Поделитесь пожалуйста опытом !

Pasha: Да ничего необычного, предполагается устанавливать letodb в подразделениях, и делать выборки из БД подразделений


sashaBG: Select DVIG COPY TO ( n_Path + 'WORK' ) <<<<<<< где n_Path содержит "//127.0.0.1:2812/FIRMA/2010/01/" дает ошибку по типу данных файл WORK.dbf создается но структура разрушена !? letodb из CVS harbour из поставки MiniGUI 1.9 Раньше работало из с другими версиями Харбора

AlexMyr: Какие типы полей в базе? Клиентскую и серверную часть letodb пересобирали?

sashaBG: Все пересобирал , типы ( N15,3 C D )

Pasha: С xHarbour ошибки нет С Harbour сервер падает по непонятной причине на строке 5111 в letofunc.c: hb_xfree( pTransInfo->lpTransItems ); Что здесь неправильно - не пойму. Память выделялась - ее надо освободить. sashaBG, AlexMyr, напишите пожалуйста версию Harbour, с которой выполнялась сборка

AlexMyr: Только что собрал LetoDB /* $Id: Changelog,v 1.328 2010/11/15 18:15:03 ptsarenko Exp $ */ харбором Harbour 2.1.0beta2 (Rev. 15728) Copyright (c) 1999-2010, http://harbour-project.org/ Harbour Build Info --------------------------- Version: Harbour 2.1.0beta2 (Rev. 15728) Compiler: Borland C++ 5.5.1 (32-bit) Platform: Windows Vista 6.0.6002 Service Pack 2 PCode version: 0.3 ChangeLog last entry: 2010-11-02 18:42 UTC+0100 Viktor Szakats (harbour.01 syena r.hu) ChangeLog ID: ChangeLog 15728 2010-11-02 18:09:03Z vszakats Built on: Nov 2 2010 23:00:37 Build options: (Clipper 5.3b) (Clipper 5.x undoc) (UNICODE) запустил сервер, потом test_ta - все отработало нормально.

Pasha: У меня сервер падает на сборке Harbour * $Id: ChangeLog 15433 2010-09-04 10:30:41Z druzus $ Завтра пересоберу Harbour с SVN и протестирую.

sashaBG: test_tr собирается но дает ошибку данных на 32 строке и сервер падает

sashaBG: Попробовал и Harbour Rev.15832 Тоже самое , разница в том что когда сервер падает виндовс показывает сообшение "Abnormal programm termination"

AlexMyr: Тоже test_tr падает с ошибкой: Error LETO/1000 Data type error Called from LETO_DBCOPY(0) Called from MAIN(32) Error LETO/1000 Data type error Called from LETO_DBCOPY(0) Called from MAIN(32) Error LETO/1000 Data type error Error LETO/1000 Data type error

Pasha: Сегодня собрал letodb с SVN Harbour, и результат получился плачевный. manage еще соединяется с сервером, но при попытке работы с ним клиентских программ letodb сразу падает с gpf. Почему - еще не разбирался. Вчера у меня возникло предположение, что в Harbour некоторое время назад были какие-то уже устраненные баги, раз сервер падал на безобидном hb_xfree. Пока мне больше сказать нечего, времени копаться не было.

Pasha: Letodb под Harbour у меня заработал после вечерней пересборки. Правда, там чуть напортачили с литовской кодовой страницей. Оператор, из-за которого падает сервер, я пока закомментировал, так что copy to/sort on теперь работает. Но причина падения сервера так и осталась непонятной.

Петр: 2010-11-18 20:45 UTC+0200 Pavel Tsarenko (tpe2/at/mail.ru) * source/server/letofunc.c * memory leak for sort operation ! temporary hack for Harbour: gpf at hb_xfree( pTransInfo->lpTransItems ) in leto_Trans function Вот так работает hb_xfree( &pTransInfo->lpTransItems ); Добавлено: не все так просто Перекомпилировал Harbour c -DHB_FM_STATISTICS Получаем GPF letodb_crash.log [pre2]Breakdown at: 2010.11.18 23:48:59 Unrecoverable error 9010: ------------------------------------------------------------------------ User: 127.0.0.1 LEO-HOME test_tr.exe Command: trans;513;2;;F;1026;Code==2;;0;0;F;T;T;F;F;F;F;1;2;1,1;2,2; Table: \test.dbf[/pre2] hb_out.log [pre2]------------------------------------------------------------------------ Application Memory Allocation Report - E:\hb2-mingw\bin\test_tr.exe Terminated at: 2010.11.18 23:49:01 Total memory allocated: 60916 bytes (596 block(s)) Warning, memory allocated but not released: 86 bytes (6 block(s)) Block 1 00aaedf8 (size 4) DBCREATE(0), "00000200" Block 2 00aae570 (size 4) DBCREATE(0), "00000000" Block 3 00abc808 (size 23) DBCREATE(0), " 2Second )" Block 4 00abcd10 (size 4) LETO_DBCOPY(0), "00000200" Block 5 00abcd78 (size 4) LETO_DBCOPY(0), "00000000" Block 6 00abcde0 (size 23) LETO_DBCOPY(0), " ;" ------------------------------------------------------------------------ [/pre2]

Pasha: Но правильно ведь hb_xfree( pTransInfo->lpTransItems ); lpTransItems - это ссылка на массив DBTRANSITEM, для которого выделялась память, ее и надо передавать в hb_xfree, а не адресс ссылки. В прочих rdd Harbour так и делается Почему в letodb этот безобидный вызов сваливает сервер - пока не понятно. С DBTRANSINFO работа ведется вроде бы корректно, память не портится. pTransInfo->lpTransItems 2 раза не освобождается, больше никто hb_xfree вызвать не может. Я прямо перед вызовом hb_xfree ставил: leto_writelog(pTransInfo->lpTransItems, pTransInfo->uiItemCount * sizeof( DBTRANSITEM )); и в логе видел правильно заполненный массив DBTRANSITEM Пока какая-то мистика, которой не существует

sashaBG: Pasha А как себя ведет xHarbour , есть проблемы такого типа ?

Pasha: sashaBG пишет: Pasha А как себя ведет xHarbour , есть проблемы такого типа ? С xHarbour такой проблемы нет, освобождение памяти работает По поводу проблемы с Harbour: я попросил помощь клуба, т.е. написал в devlist. Но клуб молчит.

alx_on: Pasha пишет: hb_xfree( pTransInfo->lpTransItems ); Подобная проблема была и у меня. Все решилось совсем в другом месте (с другой переменной), неверно память до этого выделялась (т.е. писалась информация за пределами выделенного блока и, видимо, что то портилось в цепочках блоков-памяти) В моем случае это была дозапись признака конца строки ('\0') за конец выделенной памяти - иногда падало совсем в другом месте

Dimidrol: заранее извиняюсь за нубский вопрос. есть ли возможность не указывать host-адрес каждый раз при подключении таблиц бд? то есть не писать в команде USE или функции DBUSEAREA(...) имя или айпи сервера, а указать, например в leto.ini или еще каким другим способом.



полная версия страницы