Автор | Сообщение |
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 на Харборе, ... и вообще все в наших руках :). Кто хочет участвовать в разработке, тестировании - пишите.
|
|
|
Ответов - 316
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|
alkresin
|
| moderator
|
Пост N: 301
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 08:31. Заголовок: В присланном вами te..
В присланном вами test.dbf есть "нехорошая запись" ( recno() = 61 ) с несимвольной информацией - похоже, битая. После индексирования она становится 1-й и при Gotop() на нее получается ошибка - этим объясняется, почему с descending все работает ( первой становится другая запись ). После удаления этой записи и упаковки все работает нормально. Это, впрочем, не отменяет того факта, что ошибка возвращаться не должна - надо смотреть, в чем дело.
|
|
|
alkresin
|
| moderator
|
Пост N: 302
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 09:48. Заголовок: Исправил я это дело,..
Исправил я это дело, проблема была в битом поле типа DATE. Кстати, Александр, начал я смотреть ваши изменения - что-то вы в common_c.c форматирование сбили, там теперь разделитель строк не r\n, а \r\r\n
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 61
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 09:58. Заголовок: alkresin пишет: раз..
alkresin пишет: цитата: | разделитель строк не r\n, а \r\r\n |
| Знаю :) я уже пытался выложить изменения, но меня опередили и теперь опять синхронизирую уффф, выложил проверьте плз
|
|
|
alkresin
|
| moderator
|
Пост N: 303
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 10:38. Заголовок: уффф, выложил провер..
цитата: | уффф, выложил проверьте плз |
| С common_c.c все в порядке.
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 62
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 11:16. Заголовок: alkresin пишет: Исп..
alkresin пишет: цитата: | Исправил я это дело, проблема была в битом поле типа DATE. |
| Может быть более жесткую проверку сделать (только цифры)? Может возникнуть аналогичная ситуация, но символ будет, например, больше пробела
|
|
|
alkresin
|
| moderator
|
Пост N: 304
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 12:11. Заголовок: Может быть более жес..
цитата: | Может быть более жесткую проверку сделать (только цифры)? Может возникнуть аналогичная ситуация, но символ будет, например, больше пробела |
| Нет особой необходимости. Вообще говоря, там достаточно было добавить проверку на \0, беда была именно в этом. Сервер передавал 8 нулей из битой записи, а клиент, а ведь \0 в первом байте - признак пустого поля. Клиент, обнаружив его, начинал читать следующее поля со следующего байта - и запутался.
|
|
|
santy
|
| |
Пост N: 12
Зарегистрирован: 16.12.08
|
|
Отправлено: 02.06.10 13:06. Заголовок: после изменений в фа..
после изменений в файле funcleto.h #define hb_cdp_page hb_cdppage() #if defined(HB_ERRCODE) typedef HB_ERRCODE ERRCODE; #endif не компилится в xHarbour (121_6714) если вернуть назад, всё нормально проходит перед этим была одна ошибка в препроцесоре в файле server.prg, она и осталась, причина ошибки пока непонятна.
|
|
|
alkresin
|
| moderator
|
Пост N: 305
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 13:18. Заголовок: Александр, после пос..
Александр, после последних изменений появилась проблема ( с 2010-06-01 16:45 UTC+0300 Alexander Kresin ) работает нормально, я сейчас проверил. См. сообщение на letodb-developers@lists.sourceforge.net: In test_ta.prg i add dbskip() ... AddNakl( 1, Date(), { 1400.5, 28632.28, 800.51 } ) AddNakl( 2, Date(), { 58003, 930.5 } ) ? "Records has been added" dbskip() ... and get Error LETO/1000 Data type error ... and letodb_crash.log Сервер падает. Где-то у вас ошибка закралась...
|
|
|
alkresin
|
| moderator
|
Пост N: 306
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 13:25. Заголовок: И еще вопрос по изме..
И еще вопрос по изменениям в протоколе: он изменился только для файлов с количеством полей > 256, или для всех ? Т.е., могу ли я компилировать приложения с новой версией, не трогая сервер ( у меня нет файлов с таким большим количеством полей ) ?
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 63
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 13:41. Заголовок: alkresin пишет: мог..
alkresin пишет: цитата: | могу ли я компилировать приложения с новой версией |
| Да. Фактически это не изменение, а исправление Ошибку с DbSkip() поправил (тупо else пропустил как то )
|
|
|
alkresin
|
| moderator
|
Пост N: 307
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 13:51. Заголовок: А на CVS исправления..
А на CVS исправления еще не запостили ?
|
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 64
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 13:55. Заголовок: alkresin пишет: А н..
alkresin пишет: цитата: | А на CVS исправления еще не запостили ? |
| Выложил У меня все равно где то падает собака! Поймать не могу (переход на harbour 1.01 для меня - -как совсем крайний случай :) )
|
|
|
alkresin
|
| moderator
|
Пост N: 308
Зарегистрирован: 06.07.06
|
|
Отправлено: 02.06.10 14:01. Заголовок: Так а падает на harb..
Так а падает на harbour 1.01 или не проверяли ? Я согласен, что откат на старую версию - не выход, но такая проверка может подтолкнуть в правильном направлении. P.S. Падает и без установленных MSVS Redistributable ?
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 65
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 14:37. Заголовок: alkresin пишет: Так..
alkresin пишет: цитата: | Так а падает на harbour 1.01 или не проверяли ? |
| Пока руки не дошли цитата: | P.S. Падает и без установленных MSVS Redistributable ? |
| Скорее всего молча пропускает ошибки Потому как с MSVS Redistributable отладчик (gdb) показывает ошибку примерно такого плана: неверный вызов (или неверные параметры вызова, точно не помню) С-функций (или библиотечных) Т.е. более жесткая проверка параметров вызова стандартных библиотечных функций
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 66
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 16:53. Заголовок: Проявляется при инте..
Проявляется при интенсивной нагрузке с одной машины (3 задачи с обработкой больших файлов, десятки тысяч записей) Два падение на win-сервере 1. (gdb) bt #0 0x0041cb21 in dlmalloc () #1 0x0028670c in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) Скрытый текст Dump of assembler code for function dlmalloc: 0x0041cab0 <+0>: push %ebp 0x0041cab1 <+1>: push %edi 0x0041cab2 <+2>: push %esi 0x0041cab3 <+3>: push %ebx 0x0041cab4 <+4>: sub $0x7c,%esp 0x0041cab7 <+7>: mov 0x90(%esp),%ebx 0x0041cabe <+14>: cmp $0xf4,%ebx 0x0041cac4 <+20>: ja 0x41cb40 <dlmalloc+144> 0x0041cac6 <+22>: cmp $0xa,%ebx 0x0041cac9 <+25>: ja 0x41cbf0 <dlmalloc+320> 0x0041cacf <+31>: mov 0x527660,%esi 0x0041cad5 <+37>: mov $0x2,%ecx 0x0041cada <+42>: mov $0x2,%edx 0x0041cadf <+47>: mov $0x10,%ebx 0x0041cae4 <+52>: mov %esi,%eax 0x0041cae6 <+54>: shr %cl,%eax 0x0041cae8 <+56>: test $0x3,%al 0x0041caea <+58>: je 0x41cc0f <dlmalloc+351> 0x0041caf0 <+64>: and $0x1,%eax 0x0041caf3 <+67>: xor $0x1,%eax 0x0041caf6 <+70>: lea (%eax,%edx,1),%edx 0x0041caf9 <+73>: mov %edx,%ebx 0x0041cafb <+75>: shl $0x4,%ebx 0x0041cafe <+78>: add $0x527688,%ebx 0x0041cb04 <+84>: mov 0x8(%ebx),%eax 0x0041cb07 <+87>: mov 0x8(%eax),%edi 0x0041cb0a <+90>: cmp %edi,%ebx 0x0041cb0c <+92>: je 0x41d250 <dlmalloc+1952> 0x0041cb12 <+98>: cmp %edi,0x527670 0x0041cb18 <+104>: ja 0x41d561 <dlmalloc+2737> 0x0041cb1e <+110>: mov %edi,0x8(%ebx) => 0x0041cb21 <+113>: mov %ebx,0xc(%edi)
| 2. Starting program: D:\letodb.exe [New Thread 912.0x864] [New Thread 912.0x96c] warning: Invalid parameter passed to C runtime function. warning: Invalid parameter passed to C runtime function. Падение на Mac-сервер Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x2019825c 0x0001d231 in hb_ip_rfd_set (hSocket=-1) at ../main/src/letodb/common/hbip.c:894 894 FD_SET( hSocket, &rd_fds ); Конкретно в этом случае incoming = hb_ipAccept( hSocketMain, -1, szBuffer, &lTemp ); вернула -1, что является ошибкой
|
|
|
alx_on
|
| постоянный участник
|
Пост N: 67
Зарегистрирован: 07.07.09
|
|
Отправлено: 02.06.10 23:26. Заголовок: Выложил новые измене..
Выложил новые изменения Обработка ошибки сети Решение временное, надо по другому как то реализовать Но как затычка пойдет Проверьте у себя внимательно плз Тестировал интенсивно у себя в течении часа. На последнем harbour с SVN! То что раньше падало, максимум, через 20 минут - не упало! Может совпало с погодой? :) PS да, на предмет целостности данных не сильно смотрел, но вроде не должно это повлиять :)
|
|
|
alkresin
|
| moderator
|
Пост N: 309
Зарегистрирован: 06.07.06
|
|
Отправлено: 03.06.10 09:12. Заголовок: Очень интересно! Здо..
Очень интересно! Здорово, что вы на это вышли, Александр. Пожалуй, hb_ipAccept() стоит немного изменить. Получается, что если accept() завершился с ошибкой ( вернул -1 ), но последующий WSAGetLastError() ( или errno для Линукс ) вернул 0, то все вроде-бы в порядке и для этого -1 вызываются другие функции. А ситуация такая может быть, если между вызовами accept() и WSAGetLastError() вклинился другой thread со своими socket вызовами и библиотека сокетов не thread safe.
|
|
|
alkresin
|
| moderator
|
Пост N: 310
Зарегистрирован: 06.07.06
|
|
Отправлено: 03.06.10 09:44. Заголовок: Я поменял немного hb..
Я поменял немного hb_ipAccept() в свете того, что писал ранее, надеюсь - будет работать.
|
|
|
Pasha
|
| Администратор
|
Пост N: 1472
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.06.10 20:28. Заголовок: Поправил баг, связан..
Поправил баг, связанный с установкой кодовой страницы на сервере. По-видимому, он возник после добавления авторизации пользователей: 6-й и более параметры команды intro просто игнорировались
|
|
|
Pasha
|
| Администратор
|
Пост N: 1473
Зарегистрирован: 23.05.05
|
|
Отправлено: 03.06.10 20:40. Заголовок: Александр, наверное ..
Александр, наверное еще в srvleto.h - USERSTRU надо добавить: USHORT uiVarsOwnCurr;
|
|
|
Ответов - 316
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|