On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
Pasha
Администратор




Пост N: 1937
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.05.11 19:04. Заголовок: Leto DB Server


Добавил функцию:

LETO_GROUPBY(cGroup, cFields, [cFilter], [xScopeTop], [xScopeBottom])

cGroup - имя поля, по которому группируются данные;
cFields - список числовых полей через запятую, которые суммируются. Символ # обозначает к-во записей в группе

Функция возвращает двумерный массив строк.
1-й элемент каждой строки - значение поля cGroup, следующие элементы суммы полей, заданных в cFields, или к-во записей в группе


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


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


Пост N: 131
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 14.09.11 17:49. Заголовок: AlexMyr пишет: ERRO..


AlexMyr пишет:

 цитата:
ERROR! thread2() too big packet


старый клиент и новый сервер?

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



Пост N: 271
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.09.11 21:49. Заголовок: alx_on пишет: стары..


alx_on пишет:

 цитата:
старый клиент и новый сервер?


может быть, завтра на работе проверю.

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



Пост N: 273
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 15.09.11 08:27. Заголовок: Маленькие неточности..


Маленькие неточности:
В readme_rus.txt

Для удаления службы, вызовите letodb с параметром 'uninstall':

letodb.exe install

в readme.txt

To uninstall service, run letodb with 'install' parameter:

letodb.exe install


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




Пост N: 2054
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.09.11 09:31. Заголовок: Насчет too big packe..


Насчет too big packet - я тоже несколько раз в логе видел такое, когда обновлял сервер и случайно запускал старый клиент.
readme - поправлю.

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




Пост N: 2055
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.09.11 11:07. Заголовок: Подумалось вот, что ..


Подумалось вот, что можно добавить на сервер функцию закрузки hrb-модуля с клиента, для последующего вызова с клиента функций из этого модуля на выполнение.
Но при этом не будет никакой защиты от загрузки на сервер вредоносного кода. Так что делать ее нельзя, а жаль.
Хотя даже сейчас такую функцию передачи и загрузки hrb-кода с клиента на сервер можно сделать в letoudf.hrb

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




Пост N: 1887
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.09.11 12:07. Заголовок: Pasha пишет: Но при..


Pasha пишет:

 цитата:
Но при этом не будет никакой защиты от загрузки на сервер вредоносного кода.



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

И еще в настройках внести ГЛОБАЛЬНУЮ параметр ЗАПРЕТ/РАЗРЕШЕНИЯ выполнения кода на сервере.




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



Пост N: 276
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 19.09.11 11:06. Заголовок: В readme.txt еще ост..


В readme.txt еще осталось

To uninstall service, run letodb with 'install' parameter:

letodb.exe uninstall

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




Пост N: 1891
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.09.11 23:40. Заголовок: Теперь вопрос чисто ..


Теперь вопрос чисто практический:
1) Возможно ли организовать шифрованную передачу данных между СЕРВЕРОМ и КЛИЕНТАМИ ?
Alexander S.Kresin писал где-то ранее, что часть (текстовые данные) шифрации уже реализована.
2) Механизм шифрации, какой в LetoDB ?
3) Возможно ли прикрутить "железяку" для шифрования/дешифрования. Имеется в виду ключ HASP-HL, в него встроен
криптопроцессор (используется публичный алгоритм шифрования AES/128, RSA/1024).
В поставке ключа есть функции обращения к ключу (на С) - зашифровать и расшифровать строку.
4) Возможно ли использовать LetoDB в муниципальных (федеральных) органах. Там же требуется сертификация, и всякая другая
фигня.... Где и как можно это сделать (сертификацию), может кто сталкивался ?
Если можно будет "прикрутить" HASP-HL, я думаю сертификация не потребуется....
5) Дайте примеры пожалуйста как настроить СЕРВЕР и КЛИЕНТА для работы.
И как на клиенте будет выглядеть запрос к БД-LetoDB ?



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




Пост N: 2075
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.11 08:37. Заголовок: 1. Да, шифрование тр..


1. Да, шифрование траффика есть. И для новых команд я стараюсь делать сразу поддержку и шифрованного траффика
2. Используется симметричный криптоалгоритм blowfish. Ключ - фиксированная строка длиной 10 символов, котораю зашита и на сервере, и на клиенте.
3. Я с ними дела не имел. Этот ключ надо использовать и на сервере, и на клиентах ? Там есть какая-то dll, и протокол обращения к ней ?
4. По поводу сертификации в России - ничего сказать не могу, я ведь живу на Украине.
5. Примеры..
На сервере надо задать параметры в файле leotdb.ini, их описание имеется. Основной параметр - DataPath
На клиенте - в командах/функцих use, dbCreate и пр. к имени файла надо добавить строку коннекта, вот и вся настройка.


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




Пост N: 1892
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.11 10:59. Заголовок: Pasha пишет: Этот к..


Pasha пишет:

 цитата:
Этот ключ надо использовать и на сервере, и на клиентах ? Там есть какая-то dll, и протокол обращения к ней ?


Да, вставляем ключ на сервер и другой ключ на клиента.

Есть и dll и исходные коды на С. Мне под хХарбор на С сделали функции Encrypting/Decrypting - работают на порядок быстрей чем через dll.

Pasha пишет:

 цитата:
На клиенте - в командах/функцих use, dbCreate и пр. к имени файла надо добавить строку коннекта, вот и вся настройка.


Не совсем понял. Что за строка "коннекта" ? Дайте пожалуйста описание.
USE "//127.0.0.1:2812/@/data/test" VIA ????

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




Пост N: 2077
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.11 11:53. Заголовок: Andrey пишет: Не со..


Andrey пишет:

 цитата:
Не совсем понял. Что за строка "коннекта" ? Дайте пожалуйста описание.
USE "//127.0.0.1:2812/@/data/test" VIA ????



Андрей, а в реадми ты заглядывал ? Я даже на русский язык его перевел:

5. Соединение с сервером клиентских программ

Чтобы сконнектиться с сервером, прежде всего необходимо прилинковать rddleto.lib (Windows)
или librddleto.a (Linux) у своему приложению, и добавить в начале своей программы
две строки:

REQUEST LETO
RDDSETDEFAULT( "LETO" )

Для открытия файла dbf на сервере необходимо вставить в оператор SET PATH TO,
или в команду USE путь к серверу в стандартной форме:
//ip_address:port/data_path/file_name.

Если задан параметр 'DataPath' в конфигурационном файле сервера, и он имеет
непустое значение, необходимо указывать не полный путь к файлу на сервере,
а путь относительный ( относительно значению 'DataPath' ).
Например, если необходимо открыть файл test.dbf, который расположен на
сервере 192.168.5.22 в каталоге /data/mydir и значение параметра 'DataPath'
( в файле конфигурации сервере letodb.ini ) '/data', синтаксис должен быть
таким:

USE "//192.168.5.22:2812/mydir/test"

Если сервер не запущен или Вы указали неверный путь, будет сгенерирована ошибка открытия.
Возможно проверить доступность сервера перед открытием файлов вызовом функции
leto_Connect( cAddress ), которая вернет -1 в случае неудачной попытки:

IF leto_Connect( "//192.168.5.22:2812/mydir/" ) == -1
Alert( "Can't connect to server ..." )
ENDIF


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




Пост N: 1914
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.11 22:17. Заголовок: Возвращаюсь ОПЯТЬ с ..


Возвращаюсь ОПЯТЬ с вопросом по индексным файлам.
CDX поддерживает несколько индексных файлов для одной базы. Как перешел с NTX, так я у себя в программах и оставил.
LetoDB пока не поддерживает (или уже сделали) такой нужной фичи...
В коде править на один индексный файл у себя в проектах просто немеренно ...
Будет ли реализована поддержка нескольких индексных файлов для одной базы в ближайшее время ?

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




Пост N: 2148
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.11.11 19:01. Заголовок: source\server ..


source\server\server.prg, надо строку 748 изложить в такой редакции:

nIndexStru := leto_InitIndex( nUserStru, OrdBagName( OrdCount() ), cBagName )

Думаю, это решит проблему.
Я сейчас сбросить на CVS не могу, сброшу позже, так что сделайте на своей локальной копии.


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




Пост N: 1922
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.11 20:01. Заголовок: Pasha пишет: Я сейч..


Pasha пишет:

 цитата:
Я сейчас сбросить на CVS не могу, сброшу позже



Без вопросов... Подожду...
Пока есть чем заняться...

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




Пост N: 95
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 06.12.11 16:04. Заголовок: Leto_UDF


Паша у меня просьба к тебе , Расскажи пожалуйста по-подробнее правила работы с LETO_UDF()
я почитал в tests\letoudf.prg но к сожалению не все понял , если не трудно
сделайте маленький рабочий примерчик .

LetoDB отличный сервер я активно им пользуюсь , на нем я перевел свои бухгалтерские программы
работает отлично без сбоев. Нагрузка около 50 компов без проблем . Другая моя програма для сервиса сельхоз техники тоже на нем работает
,сервер на Линуксе (помните я спрашивал как откомпилировать, Спасобо все получилось и отлично работает )
, по моим наблюдениям работает быстрее чем под Windows Server 2008 64 bit ( может надо LetoDB сервера собрать тоже в 64 бит. )

Теперь хочется повозится и с Leto_UDF и в связи с етим возникли вопросы:

1. Какая разница между функциями для выполняния на сервере типиа LETO_RECLOCK и обычный RLOCK т.д. для осталных , т.е. какие когда надо использовать ?
2. Что произойдет если получится ошибка при выполнении функций из letoudf.hrb


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




Пост N: 2191
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.12.11 17:14. Заголовок: Сервер letodb выполн..


Сервер letodb выполняет блокировки не стандартными средствами rdd, а хранит списки блокированных записей. При блокировке записи она добавляется в этот список, при разблокировке удаляется.
Правда, есть еще режим, когда записи блокируются средствами rdd: если в letodb.ini установить параметр "NO_SAVE_WA".
Поэтому в udf-функциях лучще использовать только средства letodb для lock/unlock, и не использовать RLock()/dbUnlock().
Если выдать просто RLock(), то сервер не будет знать, что запись блокирована, так как ее нет в списке блокировок, и другой клиент получит неверную информацию.

А насчет ошибки: стандартные ошибки харбора перехватываются, так что при возникновении ошибки выполнение udf-функции будет прекращено, и она вернет результат типа Nil.
Конечно, функци udf должны быть хорошо отлажены, так как их падение может привести к падению клиента.
Такие ошибки, которые привели бы к падению самого сервера, я не представляю как сделать. Это должно быть нечто, приводящее к gpf, да и то сервер может выдержать и gpf.

А примеры - так letoudf.prg и есть примеры таких udf-функций. Это что-то вроде storedproc для sql, только пишется функции на харборе. Функция выполняется в той рабочей области, в которой она запущена. Если надо выбирать данные с другой р/о, то она должна получить клиентский алиас, преобразовать его в серверный алиас вызовом leto_Alias. Пример работы с несколькими р/о смотрите в UDF_UpdCascade.
udf-функция может изменить текущую запись для клиента. Для этого она должна вернуть строку с записью, которая формируется функцией leto_rec. Клиент, получив эту строку, должен вызвать LETO_PARSEREC, передав полученную строку этой функции в качестве параметра. Можно передавать данные из нескольких р/о, массивом строк.


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


Пост N: 132
Зарегистрирован: 07.07.09
ссылка на сообщение  Отправлено: 06.12.11 17:55. Заголовок: Pasha пишет: Такие ..


Pasha пишет:

 цитата:
Такие ошибки, которые привели бы к падению самого сервера, я не представляю как сделать. Это должно быть нечто, приводящее к gpf, да и то сервер может выдержать и gpf.


Раз поднялась такая тема: единственный случай падения (жесткий, молча валится серверная часть, совсем!) - это ошибка в индексном файле
(попортилась структура файла или антивирус не дал записать, считать). Не перехватывается корректно ошибка открытия такого индекса.

PS т.к. ошибка быстро исправляется (переиндексация), то времени и желания на исправление, как всегда, нет...

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




Пост N: 2192
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 06.12.11 19:16. Заголовок: У себя (а это нескол..


У себя (а это несколько десятков серверов letodb, часть из которых работает без перезагрузки месяцами) падения сервера мне не пришлось видеть ни разу. В прошлом месяце я получил письмо из Бразилии с таким текстом:

Letodb server down while rlock() operation fails.
See letodb.log
Leto DB Server v.2.02 ! INIT: DataPath=c:\MASTER\DADOS, ShareTables=1,
MaxUsers=500, MaxTables=5000, CacheRecords=10
leto_errInternal!!!!!!!!!!!!!!!!!!
Same error if ShareTables=0

Поскольку никаких способов воспроизвести эту ситуацию у меня нет, я и не ответил автору. Что там случилось - непонятно. Но ситуация явно тоже разовая.
Пару раз видел нарушение индекса. Но там стабильно были (и есть) перебои по питанию.

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




Пост N: 2252
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.01.12 20:20. Заголовок: Добавил функцию для ..


Добавил функцию для блокировки новых коннектов: leto_LockConn( .T. )
После ее вызова сервер не будет устанавливать новые соединения, вплоть до вызова leto_LockConn( .F. )
Соответственно в утилиту magage добавлена кнопка lock/unlock.

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




Пост N: 2254
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.02.12 17:47. Заголовок: В настоящее время в ..


В настоящее время в letodb используется skip-буфер: при выполнении skip 1/-1 сервер передает клиенту не одну запись, в много, и при следующем skip клиент не обращается к серверу, а берет запись из буфера.
При обновлении данных буфер очищается.
Если после skip данные обновляются, то возникает нехорошая ситуация:
Сервер передал клиенту 10 (к примеру) записей, клиент сделал dbCommit, сбросил буфер, и опять запросил dbSkip(1). Сервер опять передал клинету 10 записей, и так далее.
В этом случае использование skip-буфера приводит не у уменьшению, а к увеличению траффика. Как этого избежать ?
Можно скажем при отработке commit на сервере устанавливать флаг для рабочей области, чтобы буфер следующий раз не использовать. А при выполнении skip выбирать одну запись, и сбрасывать этот флаг.
Или что-то другое ? Как в этом случае поступает Ads ?


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