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

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

Dima: Продолжаем тут

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

sashaBG: Pasha вот лог: User: 192.168.120.18 PLASMENT3 ccw.Exe Command: close Unrecoverable error 6005: Exception error: %s Exception Code:C0000005 Exception Address:0040CE5D EAX:202E7665 EBX:0000000A ECX:010B523C EDX:0000000A ESI:00E0AEC8 EDI:010B523C EBP:010AFD8C CS:EIP:001B:0040CE5D SS:ESP:0023:010AFD8C DS:0023 ES:0023 FS:003B GS:0000 Flags:00010206 CS:EIP: 3B 50 04 73 E9 33 C0 5D C3 55 8B EC 51 53 56 57 SS:ESP: 010AFDA8 00405C17 00E0AEC8 0000000A 010B523C 01161170 009D33D8 010AFDF8 004036D7 01161170 0000000A 010AFE6C 010B523C 009D33D0 010D3D44 010AFDD4 C stack: EIP: EBP: Frame: OldEBP, RetAddr, Params... 0040CE5D 010AFD8C 010AFDA8 00405C17 00E0AEC8 0000000A 010B523C 01161170 009D33D8 00405C17 010AFDA8 010AFDF8 004036D7 01161170 0000000A 010AFE6C 010B523C 009D33D0 010D3D44 010AFDD4 00430FC0 004036D7 010AFDF8 010AFE24 0040732A 00DFA58C 01161170 010B523C 009D33D5 00000040 010D3D44 010B523C 00DFA58C 0040732A 010AFE24 010AFE7C 00407605 010B523C 00DFA58C 01161170 010AFE6C 01375B96 00DFA58C 01375B9D 6C656B69 00407605 010AFE7C 010AFEA8 0040C8D1 00DFA58C 01375B9D 01375B96 00000015 00DFA58C 00000001 00000001 0000000C 0040C8D1 010AFEA8 010AFED4 0040D650 00DFA58C 004B4BFC 00FB0000 009D2C34 00012C94 00000138 83126E98 40DD3958 0040D650 010AFED4 010AFFA4 004B49F8 00000001 00000000 00000000 009D2C34 00000094 00000005 00000001 00000A28 004B49F8 010AFFA4 010AFFB4 004B4A2B 009D2C34 004B4BFC 004B4A2B 010AFFB4 010AFFEC 7C80B713 009D2C34 00000000 00000000 009D2C34 7FFDC000 8A62C600 010AFFC0 898616B8 Modules: 0x00400000 0x000DE000 d:\letodb\letodb.exe 0x7C900000 0x000AF000 C:\WINDOWS\system32\ntdll.dll 0x64D00000 0x0003F000 C:\Program Files\AVAST Software\Avast\snxhk.dll 0x7C800000 0x000F6000 C:\WINDOWS\system32\KERNEL32.dll 0x71AD0000 0x00009000 C:\WINDOWS\system32\WSOCK32.DLL 0x71AB0000 0x00017000 C:\WINDOWS\system32\WS2_32.dll 0x77DD0000 0x0009B000 C:\WINDOWS\system32\ADVAPI32.dll 0x77E70000 0x00092000 C:\WINDOWS\system32\RPCRT4.dll 0x77FE0000 0x00011000 C:\WINDOWS\system32\Secur32.dll 0x77C10000 0x00058000 C:\WINDOWS\system32\msvcrt.dll 0x71AA0000 0x00008000 C:\WINDOWS\system32\WS2HELP.dll 0x7E410000 0x00091000 C:\WINDOWS\system32\USER32.DLL 0x77F10000 0x00049000 C:\WINDOWS\system32\GDI32.dll 0x71A50000 0x0003F000 C:\WINDOWS\system32\mswsock.dll 0x662B0000 0x00058000 C:\WINDOWS\system32\hnetcfg.dll 0x71A90000 0x00008000 C:\WINDOWS\System32\wshtcpip.dll 0x69450000 0x00016000 C:\WINDOWS\system32\faultrep.dll 0x77C00000 0x00008000 C:\WINDOWS\system32\VERSION.dll 0x769C0000 0x000B4000 C:\WINDOWS\system32\USERENV.dll 0x76360000 0x00010000 C:\WINDOWS\system32\WINSTA.dll 0x5B860000 0x00055000 C:\WINDOWS\system32\NETAPI32.dll 0x76F50000 0x00008000 C:\WINDOWS\system32\WTSAPI32.dll 0x77920000 0x000F3000 C:\WINDOWS\system32\SETUPAPI.dll 0x77F60000 0x00076000 C:\WINDOWS\system32\SHLWAPI.dll 0x773D0000 0x00103000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll 0x5D090000 0x0009A000 C:\WINDOWS\system32\comctl32.dll 0x77B40000 0x00022000 C:\WINDOWS\system32\Apphelp.dll LetoDB у меня работает как демон а не как сервиз не знаю может в етом проблема сначала я кинулся убирать AVAST но не в нем проблема , несмотря что он враждебно относится к LetoDB . иногда падает при закрытии одной обласи или всех рабочих облостей со стороны клиента . Лечится ето через Leto_Commit() перед закрытием на локаьном соединении ето нельзя воспроизвести только через сеть. Ошибка получается не кажды раз . В етих модулях которые вызвали падение я не использую транзакции.

AlexMyr: При сборке manage.prg с помощью manage.hbp получаю hbmk2: Warning: Non-portable parameter: '{mingw|mingw64}-l../../lib/${hb_plat}/${hb_comp}/librddleto.a' in manage.hbp:18. Use '-L..\..\lib\win\mingw -lrddleto' option(s) instead. hbmk2: Warning: Non-portable parameter: '{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libhwgui.a' in manage.hbp:19. Use '-Llib\win\mingw -lhwgui' option(s) instead. hbmk2: Warning: Non-portable parameter: '{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libprocmisc.a' in manage.hbp:20. Use '-Llib\win\mingw -lprocmisc' option(s) instead. hbmk2: Warning: Non-portable parameter: '{mingw|mingw64}-l${hwgui_dir}lib/${hb_plat}/${hb_comp}/libhbxml.a' in manage.hbp:21. Use '-Llib\win\mingw -lhbxml' option(s) instead. hbmk2: Compiling Harbour sources... manage.prg(52) Error F0029 Can't open #include file 'hwgui.ch' hbmk2: Error: Running Harbour compiler (embedded). 1 (c:\dev\harbour\bin\harbour.exe) -n2 manage.prg -n -w -q0 -es2 -o..\..\bin\win\m ingw\.hbmk\win\mingw\ -ic:\dev\harbour\include -i..\..\include -iinclude Собираю таким hbp, с помощью соответствующих hbc файлов ${hwgui_dir}/hwgui.hbc ../../rddleto.hbc -inc -mt manage И еще, для свежего hwgui надо добавить hwg_ к след. ф-ям hbmk2: Error: Referenced, missing, but unknown function(s): SENDMESSAGE(), GETEDITTEXT(), MSGSTOP(), MSGYESNO()

santy: Скачал последнюю версию. (v 1.350.2.116 2013/03/24) Собрал под Harbour для Watcom. Создал daemon, service, lib, dll ошибок нет (с __BM и без). Под xHarbour нужно переделать BEGIN SEQUENCE на try catch в файле server.prg. Для теста взял VC2003 и Harbour создал сервис ошибок нет тольки варнинги.


SergKis: Pasha Есть такая ситуация (версия letodb $Id: Changelog,v 1.350 2011/04/21 18:00:52 ptsarenko Exp $). таблица letodb LastRec 2500, RecSize 1567 : 1-ый клиент листает MiniGui browse - соединение быстрый internet 2-ой клиент делает запросы с модемного соединения GPRS: [pre2] 1. время выполнения 30-40 сек., первый клиент нормально работает while ! eof() aAdd(aArr, {RecNo(), Fld1, Fld2, Fld3}) skip enddo 2. время выполнения 2-3 сек., у первого клиента клинит browse на это время leto_udf('UDF_RecordsNo') - возвращает массив записей {RecNo1, ...} 3. время выполнения 4-5 сек., у первого клиента клинит browse на это время leto_udf('UDF_RecordsNo', 'Fld1,Fld2,Fld3') - возвращает массив записей {{RecNo, Fld1,Fld2,Fld3}, ...} Function UDF_RecordsNo(nUseArea, cParam) ... while ! eof() aAdd(aArr, RecNo()) // или aAdd(aArr, {RecNo, Fld1, Fld2, Fld3}) skip enddo Return leto_AtoC(aArr) // или bk_A2S(aArr) [/pre2] Вопрос - есть ли механизм для применения в цикле while чтобы передавать управление letodb и не клинить работу др.клиента, может специальиный skip надо применять или это дохлое дело ... ?

Pasha: Так это же старая версия letodb с двумя потоками, в которой все запросы выполняет один поток. В этой версии ничего сделать нельзя. Надо использовать rel-1-mt ветвь

SergKis: Pasha пишет:В этой версии ничего сделать нельзя. Я так и думал.

Dima: Pasha А во сколько потоков сегодня работает Leto сервер ?

Pasha: Сейчас для каждого соединения создается отдельный поток

Dima: Pasha Юзер создал переменную на сервере leto_varSet( "main","var_int",100 ) И трах бах комп у него "упал" , переменная останется на сервере ?

Pasha: Dima пишет: И трах бах комп у него "упал" , переменная останется на сервере ? Нет, сервер увидит, что соединение отвалилось, и закроет его со всеми данными коннекта, в том числе очистит созданные переменные.

PSP: Паша, какой таймаут перед сбросом соединения отвалившегося клиента? И касается ли это заблокированных этим клиентом записей?

Dima: Pasha Это правильно А объявленная юзером переменная будет доступна другим юзерам ? То есть если с одной станции я создал переменную vasiapupkin а с другой пытаются войти и тоже создать такую же переменную , я могу проверить существование этой переменной созданной другим юзером ? Просто с помощью этих переменных хочу контролировать вход юзеров в программу. В программе не должно быть 2-х активных юзеров с одним логином.

Pasha: Dima пишет: А объявленная юзером переменная будет доступна другим юзерам ? Честно говоря, поддержку переменных делал не я, и сам я их не использую. Насколько я понял по сырцам, здесь важен флаг создания переменной: 4-й параметр функции leto_VarSet Если установлен флаг LETO_VOWN, то это переменная именно этого юзера, и при закрытии соединения она будет удалена. Иначе переменная останется.

Pasha: PSP пишет: Паша, какой таймаут перед сбросом соединения отвалившегося клиента? И касается ли это заблокированных этим клиентом записей? Точно не скажу, какое-то значение по умолчанию, предусмотренное в hbsocket. Но если я принудительно снимаю клиентскую программу, сервер сразу это видит и закрывает это соединение со всеми его данными, в том числе блокировками записей.

Dima: Pasha Хорошо а как тогда организовать на уровне Leto сервера что бы нельзя было зайти в программу с одним логином более 1 раза ? Кинулся было к варианту с переменными но как оказалось они не общедоступны... Можно конечно и по старинке сделать но хотелось более красиво реализовать.

Pasha: Почему не общедоступны ? Примерно так: if leto_VarGet("users", cUserID) == nil leto_VarSet("users", cUserID, value) // только надо флаги правильно указать else quit endif

Dima: Pasha Понял. Пробну. Спасибо ! Как часто вызывать LETO_CONNECT() ? Перед каждым USE или достаточно 1 раз в начале программы ? RddInfo( RDDI_REFRESHCOUNT, <lSet>,, [nConnection] ) это глобальная установка или нужно ее указывать при открытии каждой базы ?

Dima: Pasha пишет: // только надо флаги правильно указать Про флаги можно подробнее ?! Какой что означает... [pre2] #define LETO_VCREAT 1 #define LETO_VOWN 2 #define LETO_VDENYWR 4 #define LETO_VDENYRD 8 #define LETO_VPREVIOUS 1 [/pre2] Есть пожелание :) Добавить в возвращаемый массив LETO_MGGETINFO 18 элементом серийный номер винта с которого стартовал LetoDB сервер , ну или системного винта. Говорю о функции volserial() А еще лучше MAC адрес сетевой платы !!! То есть нужен любой уникальный ID оборудования , что бы прогу можно было привязать , зная что ее ни кто не упрет на лево (минуя разработчика).

Pasha: Dima пишет: Как часто вызывать LETO_CONNECT() ? Перед каждым USE или достаточно 1 раз в начале программы ? Надо один раз вызывать. RddInfo( RDDI_REFRESHCOUNT, <lSet>,, [nConnection] ) это глобальная установка или нужно ее указывать при открытии каждой базы ? Глобальная установка, для всех р/о

Dima: Pasha Понял. А что насчет этого ? Ну очень интересно Dima пишет: Про флаги можно подробнее ?! Какой что означает... Dima пишет: Есть пожелание :)



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