Форум » 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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.

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

Pasha: На сервере где-то есть утечка памяти. Если запустить letodb совместно с letodbtray, и понаблюдать над ним через диспетчер задач, то видно, что память, используемая letodb, увеличивается. Т.е. утечка возникает при вызове leto_connect() - leto_disconnect() Пересмотрел пары hb_xgrab - hb_xfree, malloc - free, утечки не нашел. А она есть

Pasha: А уж какая утечка памяти в letodbtray... если из letodb едва сочится по капелькам, то из letodbtray хлещет вовсю

sashaBG: А каким образом ее поймать , где она я к сожалению не очень знаком со средствами выделения памяти и ее освобождения в Харборе Может ето потому что у меня Харбор не так собран , наверно надо с ключиками розобратся P.S. надо подучится


Pasha: Возможно, проблема в Leto_connect() - Leto_disconnect() в клиентской части leto. Во всяком случае, когда letodb не запущен, утечки в letodbtray нет.

Pasha: Мне кажется, что диспетчер задач windows врет, и врет сильно. На winxp sp1 память, используемая letodbtray, за 3 часа выросла с 8М до 70М. На winxp sp2 осталась почти такой же. Я в сервере добавил для LETO_MGGETINFO() еще 2 элемента - обьем памяти, так что можно будет отслеживать утечки А для letodbtray можно проверить память, вызывая Memory(1001)

Dima: Pasha пишет: Мне кажется, что диспетчер задач windows врет Нужно поюзать какую то альтернативную мерялку. Например http://www.securitylab.ru/software/234095.php

Pasha: Dima пишет: Нужно поюзать какую то альтернативную мерялку. Поставил. Результат практически такой же, как у task manager Для xp sp1 у letodbtray память дошла уже почти до 100М, а для sp2 - почти тоже самое. Непонятно. это в самой windows трубы ржавые ? Может быть конечно, еще minigui протекает А использование Memory() показывает, что на клиенте при connect - disconnet утечки нет. На сервере при каких-то операциях есть утечка несколько сот байт, а в каких - надо выяснять

Dima: Pasha пишет: Непонятно. это в самой windows трубы ржавые ? Возможно ;) Не зря ведь был SP2 а затем SP3

AlexMyr: Сегодня локально запускал и останавливал сервер. В letodb.log формат даты меняется: 06/30/10 08:28:14: Leto DB Server has been started. 06/30/10 08:34:24: Server has been closed. 06/30/10 09:16:34: Leto DB Server has been started. 30.06.2010 11:05:13: Server has been closed. 06/30/10 11:05:14: Leto DB Server has been started. 30.06.2010 12:54:07: Server has been closed. 06/30/10 12:54:14: Leto DB Server has been started. 06/30/10 12:54:35: Server has been closed. 06/30/10 12:54:39: Leto DB Server has been started. 06/30/10 12:55:27: Server has been closed. 06/30/10 12:55:36: Leto DB Server has been started. 30.06.2010 14:49:55: Server has been closed. 06/30/10 14:50:14: Leto DB Server has been started. 06/30/10 14:50:37: Server has been closed. 06/30/10 14:50:46: Leto DB Server has been started.

AlexMyr: В letodb.ini Pass_for_Login = 1 Pass_for_Data = 1 Добавил пользователя с правами NNN В программе через HBROWSE (HWGUI) при попытке изменить данные вылазит ошибка Error LETO/1021 Помилка в тип? даних Called from DBUNLOCK(0) Called from HBROWSE:EDIT(3153) Called from HBROWSE:ONEVENT(551) Called from HWG_ACTIVATEMAINWINDOW(0) Called from HMAINWINDOW:ACTIVATE(355) Called from MAIN(107) HwGUI 2.17 Harbour 2.1.0beta2 (Rev. 14944) Date:30.06.2010 Time:14:56:39 При Pass_for_Data = 0 без ошибок т.к. права не проверяются. Что делать? Проверять локально права пользователя и давать (не давать) добро на редактирование в HBROWSE? Как правильно?

alkresin: Pasha пишет: Я в сервере добавил для LETO_MGGETINFO() еще 2 элемента - обьем памяти, так что можно будет отслеживать утечки Вот это, IMHO, зря. Зачем нагружать сервер сбором и пересылкой не имеющей отношения к letodb информацией, зачем клиенту знать, что там с памятью на сервере ? У администратора есть и другие средства для этого. Что касается утечки при connect / disconnect ... В кодах leto вроде все чисто. Может, проблема, действительно, в недрах реализации ip в SP1. У меня серверы под Линуксом работают, там я такого не наблюдал.

Pasha: По поводу утечки в letodbtray, или подобной утилиты, в winxp sp1 Вызов Memory(1001) показывает, что память не увеличивается, остается постоянной, байт в байт. Сначала я попробовал вызывать hb_gcAll(.t.), результата это не дало Затем применил другую схему: вместо вызова connect - disconnect при старте соединяюсь с сервером, затем по таймеру опрашиваю его вызовом Leto_MgGetInfo(). Такой чопик помог, утечка практически прекратилась. Вернее, память в task manager увеличивается, но на самую малось

alkresin: AlexMyr пишет: Сегодня локально запускал и останавливал сервер. В letodb.log формат даты меняется: В промежутке между стартом /остановом, наверное, программы какие-то запускались. При подсоединении пользователя формат даты передается на сервер, хотя, конечно, он должен только для этого пользователя работать. Надо будет посмотреть ...

Pasha: alkresin пишет: Вот это, IMHO, зря. Зачем нагружать сервер сбором и пересылкой не имеющей отношения к letodb информацией, зачем клиенту знать, что там с памятью на сервере ? У администратора есть и другие средства для этого. Так у администратора сейчас единственное средство пощупать letodb - это утилита manage. Туда я и добавил этот вызов. Если сервер собирать без fmstat, то эта добавка на работу сервера никак не скажется, разве что клиенту будет пересылаться дополнительно 2 нуля, то есть 4 байта: "0;0;"

alkresin: AlexMyr пишет: Что делать? Проверять локально права пользователя и давать (не давать) добро на редактирование в HBROWSE? Тут подумать надо. Локально права пользователя вы так просто не проверите - ведь если у него админ прав нет, то он их не прочитает с сервера. Можно, конечно, не возвращать ошибку в такой ситуации, а, не изменяя данные, сказать что все Ок - но это, наверное, неправильно. Так что предлагайте варианты.

alkresin: Так у администратора сейчас единственное средство пощупать letodb - это утилита manage Ну есть же всякие process explorer'ы ... Или у администратора физически нет доступа к сереверу ?

alkresin: alkresin пишет: В промежутке между стартом /остановом, наверное, программы какие-то запускались. При подсоединении пользователя формат даты передается на сервер, хотя, конечно, он должен только для этого пользователя работать. Надо будет посмотреть ... В принципе, ничего опасного здесь нет. Перед выполнением любой операции формат даты устанавливается в значение для данного клиента. В лог пишется, соответственно, в формате, установленном для последнего клиента. На других это не влияет.

alkresin: Наткнулся на одну ошибку - seek по отфильтрованной базе неправильно работает, если фильтр выполняется на стороне клиента ( это когда в нем присутствуют переменные, user defined функции, алиасы ). Надо будет исправить, не знаю только когда - со временем туго.

AlexMyr: alkresin пишет: В промежутке между стартом /остановом, наверное, программы какие-то запускались. При подсоединении пользователя формат даты передается на сервер, хотя, конечно, он должен только для этого пользователя работать. Я игрался только с editable в HBROWSE и менял Pass_for_Data в letodb.ini, больше ничего не трогал в программе. Сервер не пересобирал, тоько останавливал и запускал. Как по мне то в letodb.log должно записываться с теми установками с какими собирался сервер, а юзеру то что хочет юзер (мое ИМХО).

AlexMyr: alkresin пишет: Тут подумать надо. Локально права пользователя вы так просто не проверите - ведь если у него админ прав нет, то он их не прочитает с сервера. Можно, конечно, не возвращать ошибку в такой ситуации, а, не изменяя данные, сказать что все Ок - но это, наверное, неправильно. Так что предлагайте варианты. Сейчас получается, что юзер с правами NNN в HBROWSE заходит в режим редакирования (может случайно или нет по enter или двойному клику) и этим блоктрует запись, уходит пить кофе, чем не дает возможность править данные другим с правами NNY, что не есть правильно. И сервер не знает в каком режиме клиентская сторона с HBROWSE:acolumns:leditable равна true или false, и в других режимах редактирования данных. Получается, что юзера с правами NNN нужно сначала проверить, что он хочет делать (добавить, изменить, удалить), а потом серверу решить, что делать. На первых порах предлагается молча оставить данные как есть и не возвращать ошибки.



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