On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
alkresin
moderator


Пост N: 31
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.01.08 11:36. Заголовок: Leto DB Server (продолжение)


Только что открыл на 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 на Харборе, ... и вообще все в наших руках :).

Кто хочет участвовать в разработке, тестировании - пишите.



Спасибо: 0 
Профиль
Ответов - 316 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


Andrey
постоянный участник




Пост N: 1368
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.06.10 12:07. Заголовок: Случайно нашел: http..


Случайно нашел:


Откуда взял http://forum.ru-board.com/topic.cgi?forum=8&topic=34526&start=20

DBF рулит....

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 328
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 09.06.10 14:01. Заголовок: Pasha пишет: Алекса..


Pasha пишет:

 цитата:
Александр, посмотрите пожалуйста такой случай
Перед транзакцией запись удалена


Сделал такой тест:

Function Main
Local cPath := "//127.0.0.1:2812/"

REQUEST LETO
RDDSETDEFAULT( "LETO" )

? "Start"
dbCreate( cPath+"Nakl1", { {"NORD","N",10,0} } )

use ( cPath+"Nakl1" ) New
append blank
replace nord with 10
append blank
replace nord with 20
unlock

go top
delete
? "Deleted ?", deleted()
skip(1)
go top
? "Deleted ?", deleted()

leto_BeginTransaction()
dbRecall()
leto_CommitTransaction()

? "Deleted ?", deleted()
?

Return Nil

Результат:
Deleted ? .T.
Deleted ? .T.
Deleted ? .F.

Вроде, все правильно работает ...


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1491
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.06.10 14:07. Заголовок: Значит, есть еще как..


Значит, есть еще какой-то фактор, вилияющий на этот флажок
У меня этот глюк проявляется в большой транзакции. Я покопаюсь еще и попробую выяснить, в чем дело

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 329
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.06.10 08:28. Заголовок: Pasha, мне кажется, ..


Pasha, мне кажется, вы что-то не так сделали при последних исправлениях в реализации leto_intro - портится формат даты. Теперь, если во время сеанса работы открывались таблицы ( при этом вызывается setuserenv ), во всех последующих записях в журнал, в т.ч. при остановке сервера, вместо даты пишется ;F. Это ведь и на выполнение операций, связанных с датой, может влиять.

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 330
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.06.10 08:50. Заголовок: Я разделил letofunc...


Я разделил letofunc.c на 2 файла - выделил в letocore.c ядро, те функции, которые организуют работу сервера.
Предлагаю построить работу по созданию нового ядра следующим образом:

1. Создать новый файл ( cernel2.c, например ), где будет реализована та же схема использования потоков, что и сейчас, только методами Harbour mt. В любом случае у нас будет поток, принимающий соединения и, как минимум один, поток, исполняющий RDD операции, так что это будет нормальная база для дальнейшей работы.
2. Отлаживаем - чтоб работало стабильно и с не меньшей производительностью, чем действующий вариант, без этого дальше идти нет смысла.
3. Прорабатываем и реализуем схему взаимодействия дополнительных потоков.


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1492
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 10:49. Заголовок: alkresin пишет: Pas..


alkresin пишет:

 цитата:
Pasha, мне кажется, вы что-то не так сделали при последних исправлениях в реализации leto_intro - портится формат даты. Теперь, если во время сеанса работы открывались таблицы ( при этом вызывается setuserenv ), во всех последующих записях в журнал, в т.ч. при остановке сервера, вместо даты пишется ;F. Это ведь и на выполнение операций, связанных с датой, может влиять.



Дело оказалось не в последних исправлениях

Раньше этот код:

      if( nParam > 5 ) 
{
if( ( ptr = strchr( pp1, ';' ) ) != NULL )
{
*ptr = '\0';
pUStru->cdpage = hb_cdpFind( pp1 );
pp1 = ptr + 1;
if( ( ptr = strchr( pp1, ';' ) ) != NULL )
{
if( pUStru->szDateFormat )
hb_xfree( pUStru->szDateFormat );
pUStru->szDateFormat = (char*) hb_xgrab( ptr - pp1 + 1 );
memcpy( pUStru->szDateFormat, ptr, ptr - pp1 );
pUStru->szDateFormat[ptr-pp1] = '\0';
if( *(ptr + 1) == ';')
pUStru->bCentury = (*(ptr + 2) == 'T' ? TRUE : FALSE);
}
}
}


игнорировался, а теперь он отрабатывается. А в нем ошибка:

вместо

memcpy( pUStru->szDateFormat, ptr, ptr - pp1 );

надо

memcpy( pUStru->szDateFormat, pp1, ptr - pp1 );

Действительно серьезная ошибка, приведет к тому, что DTOC() в фильтрах и индексах на сервере не будет работать
Я смогу исправить на CVS только вечером, так что есть есть возможность - поправьте

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1493
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 11:01. Заголовок: Кстати, а как закрыв..


Кстати, а как закрывается letodb при выключении сервера (windows) ?
Я смотрю, в логе нет записи про останов сервера

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 331
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.06.10 11:19. Заголовок: Я смогу исправить на..



 цитата:
Я смогу исправить на CVS только вечером, так что есть есть возможность - поправьте


Спасибо за информацию. Поправлю.

 цитата:
Кстати, а как закрывается letodb при выключении сервера (windows) ?


Боюсь, что никак. Я его использую под Линуксом и там у меня прописан стандартный скрипт для запуска/остановки служб. А под Windows надо, наверное, обработку сигнала соответствующего сделать.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1494
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 14:29. Заголовок: Александр, помогите ..


Александр, помогите пожалуйста исправить ошибку, связанную с relations:

Сэлф-контайнед такой:

Local nId

dbCreate("Table1", {{'id', 'N', 8, 0}})
dbCreate("Table2", {{'id', 'N', 8, 0},{'Name','C',20,0}})

USE table1 new shared
INDEX ON id TAG table1

USE table2 new shared
INDEX ON id TAG table2

for nId := 1 to 100
table1->(dbAppend())
table1->Id := nId
table2->(dbAppend())
table2->Id := nId
next
table1->(dbCommit(), dbUnlock())
table2->(dbCommit(), dbUnlock())

select table1
dbSetRelation( "table2", {|| id}, "id" )
seek 2
//Если снять комментарий со следующего оператора (чтение любого поля table2), ошибка исчезает
//? table2->Id
if table2->(RLock())
table2->Name := '1'
? table2->(dbRecordInfo(2)) // .T.
// запись как будто блокирована, но
table2->(dbCommit()) // ошибка
endif

На клиенте flush выдает команду "upd", и ошибка возникает на сервере в UpdateRec:

if( ( !pTA || ulRecNo ) && pAStru->pTStru->bShared && !pAStru->bLocked && leto_IsRecLocked( pAStru, ulRecNo ) != 1 )
{
/* The table is opened in shared mode, but the record isn't locked */
if( !pTA )
hb_xvmSeqEnd();
return 4;
}


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1495
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 14:49. Заголовок: alkresin пишет: ци..


alkresin пишет:

 цитата:
цитата:
Кстати, а как закрывается letodb при выключении сервера (windows) ?



Боюсь, что никак. Я его использую под Линуксом и там у меня прописан стандартный скрипт для запуска/остановки служб. А под Windows надо, наверное, обработку сигнала соответствующего сделать.



В xHarbour наверное можно воспользоваться функцией:

HB_PushSignalHandler( HB_SIGNAL_QUIT, "Handle" )
...
Function Handle( nSignal, aParams )
IF nSignal == HB_SIGNAL_QUIT
...

а какой аналог есть в Harbour ? Эту обработку делать только для windows ?


Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 332
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.06.10 16:05. Заголовок: Александр, помогите ..



 цитата:
Александр, помогите пожалуйста исправить ошибку, связанную с relations:


Исправил. Там при блокировке запись в дочерней area не устанавливалась предварительно в соответствие с родительской. Кстати, такая же ерунда может и при replace для этой записи произойти.

 цитата:
а какой аналог есть в Harbour ? Эту обработку делать только для windows ?


1)Не знаю, не смотрел 2)По-хорошему, и для Линукс надо - не все ведь правильно letodb установят.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1496
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 16:11. Заголовок: alkresin пишет: Исп..


alkresin пишет:

 цитата:
Исправил.



Спасибо

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1497
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.06.10 16:51. Заголовок: Наверное, надо бы пе..


Наверное, надо бы переделать генерацию ошибок на клиенте, и соответственно передачу полной информации об ошибке с сервера
А то сейчас вместо lock required получаем data type error.
Делаем ?

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 333
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 10.06.10 18:52. Заголовок: Наверное, надо бы пе..



 цитата:
Наверное, надо бы переделать генерацию ошибок на клиенте, и соответственно передачу полной информации об ошибке с сервера


Да, конечно, дело нужное.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 1369
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.06.10 23:22. Заголовок: Pasha пишет: Кстати..


Pasha пишет:

 цитата:
Кстати, а как закрывается letodb при выключении сервера (windows) ?
Я смотрю, в логе нет записи про останов сервера



alkresin пишет:

 цитата:
А под Windows надо, наверное, обработку сигнала соответствующего сделать.



Вот, вот я об этом в самом начале писал ! Сидит процесс в Windows'e и только ручками можно удалить.
Не по правилам сделано. Нужно наверно как у всех в трее сделать, чтоб останавливать можно было !
А для терминала, тоже запрос нужно делать, а не по ESC - чтоб отключался....

Спасибо: 0 
Профиль
alkresin
moderator


Пост N: 335
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 11.06.10 08:04. Заголовок: Вот, вот я об этом в..



 цитата:
Вот, вот я об этом в самом начале писал ! Сидит процесс в Windows'e и только ручками можно удалить.
Не по правилам сделано. Нужно наверно как у всех в трее сделать, чтоб останавливать можно было !


В трэй его можно посадить только средствами одной из GUI оболочек. Вы хотите, чтобы я всех принудительно посадил на HwGUI ?
Если нужна такая штука, напишите маленькую GUI утилиту теми инструментами, которые вы используете ( HwGUI, MiniGui, Fivewin, ... ) - чтобы она запускала и останавливала сервер ( letodb, letodb stop ). Еще одно преимущество такого решения - сам сервер избавлен от необходимости обрабатывать сообщения, идущие на его окно и занимается исключительно своими непосредственными задачами.

 цитата:
А для терминала, тоже запрос нужно делать, а не по ESC - чтоб отключался....


Вы имеете ввиду сервер, скомпилированный с __CONCOLE__ ? Это ж экспериментальный режим, использовавшийся только на начальной стадии разработки. Забудьте про него.

Спасибо: 1 
Профиль
alx_on
постоянный участник


Пост N: 79
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 11.06.10 12:50. Заголовок: alkresin пишет: Пре..


alkresin пишет:

 цитата:
Предлагаю построить работу по созданию нового ядра следующим образом


Поддерживаю

PS я не потерялся, просто офис переезжает (и я вместе с ним :) )
в выходные включусь в обсуждения и доработку

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 1370
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.06.10 12:55. Заголовок: alkresin пишет: Еще..


alkresin пишет:

 цитата:
Еще одно преимущество такого решения - сам сервер избавлен от необходимости обрабатывать сообщения, идущие на его окно и занимается исключительно своими непосредственными задачами.


Спасибо, понял.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1499
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.06.10 14:42. Заголовок: alkresin пишет: Есл..


alkresin пишет:

 цитата:
Если нужна такая штука, напишите маленькую GUI утилиту теми инструментами, которые вы используете ( HwGUI, MiniGui, Fivewin, ... ) - чтобы она запускала и останавливала сервер ( letodb, letodb stop ).



Можно сделать такую утилитку средствами hwgui, и положить ее в letodb\utils
В связи с этим обьявляется конкурс на иконку для letodb-tray

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 1500
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.06.10 16:46. Заголовок: Pasha пишет: Значит..


Pasha пишет:

 цитата:
Значит, есть еще какой-то фактор, вилияющий на этот флажок
У меня этот глюк проявляется в большой транзакции. Я покопаюсь еще и попробую выяснить, в чем дело



Докладываю. Вот в таком случае:

Local nId
dbCreate("Table1", {{'id', 'N', 8, 0}})

use table1 shared
for nId := 1 to 10
table1->(dbAppend())
table1->Id := nId
next

go top
if RLock()
leto_BeginTransaction()
dbDelete()
skip
skip -1
dbCommit()
leto_CommitTransaction()
dbUnlock()
endif
? RecNo(), Deleted() // .F.
skip
skip -1
? RecNo(), Deleted() // .T.

флажок deleted() возвращается неправильный


Спасибо: 0 
Профиль
Ответов - 316 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 143
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет