Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Firebird, InterBase |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 вперед Ctrl→ все |
Док Member Откуда: Казань Сообщений: 6489 |
Преамбула: я тут задался целью написать для себя кроссплатформенный велосипед с использованием всех утилит FB "в одном стакане", чтобы не мыкаться с командной строкой. В прикладе используется компонент TProcess (лазарусовская обвязка вокруг ShellExecute/System), который создается в доп.потоке, вызывает gbak/isql и т.д., ждет окончания их работы и благопристойно умирает вместе с потоком. В ситуации, когда нужно срочно прервать b/r, мне необходимо сначала корректно завершить работу gbak/isql. Если просто уничтожить поток вместе с выполняющимся b/r, то утилиты, очевидно, лочат какое-то время выводимые файлы, потому что при повторной попытке запустить процесс я в течение 30-60 сек не могу удалить "неудачный" бекап и получаю отлуп: gbak: ERROR:cannot open backup file d:\temp\test.fbk gbak:Exiting before completion due to errors Я читал про мониторинг, но DELETE FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION меня не устраивает, потому что бекап может делаться на работающей с юзерами базе. Можно, конечно, вычислить "виновника" по MON$REMOTE_PROCESS, но в этом случае грохнутся соседние экземпляры моего приложения, которые в этом время будут делать что-то еще. В идеале получить бы MON$ATTACHMENT_ID текущего коннекта, но как это сделать при использовании gbak? Есть какие-нибудь соображения? ================= Док. Win7 Ultim x64/Deb 10 (MATE; gtk3) amd64: FB 3.0.4.33054, Lazarus 2.1(r.61884); FPC 3.3.1 (r.43016), IBX by -Rik- |
28 сен 19, 15:54 [21981678] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10213 |
Док, для gbak можно было сразу воспользоваться ServiceAPI и получить полный контроль за всем происходящим. |
28 сен 19, 16:15 [21981680] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
можно подробнее для гуманитария, что ты имел ввиду? :) |
||
28 сен 19, 16:39 [21981690] Ответить | Цитировать Сообщить модератору |
hvlad Member Откуда: Сообщений: 10691 |
Док, MON$REMOTE_PID |
28 сен 19, 16:42 [21981691] Ответить | Цитировать Сообщить модератору |
Симонов Денис Member Откуда: Рязань Сообщений: 10213 |
в IBX лазаря нет IBBackupService? |
||
28 сен 19, 16:48 [21981694] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
в данном случае я не использую его
а как извлечь его из текущего соединения gbak? Есть какие-нибудь ключи? Или придется изучать низкоуровневой доступ к БД? :) |
||||
28 сен 19, 17:04 [21981695] Ответить | Цитировать Сообщить модератору |
hvlad Member Откуда: Сообщений: 10691 |
Док, когда ты запускал дочерний процесс, ты мог получить его PID. Кстати
PS PID - это process ID (на всякий) |
||
28 сен 19, 17:09 [21981697] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
ага, вот ты о чем! Я наивно полагал, что PID надо получать из таблиц мониторинга :) Щас спрошу на лазаревском форуме, можно ли получить PID из TProcess. |
||
28 сен 19, 17:27 [21981701] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
:) нет, конечно, но я сделал вывод по аналогии, глядя в таблицы MON$ATTACHMENTS двух запущенных экземпляров IBE |
||
28 сен 19, 17:28 [21981703] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 48838 |
Авотфиг. Там не то что "полного", там минимального контроля и то нет. Posted via ActualForum NNTP Server 1.5 |
||
28 сен 19, 17:28 [21981704] Ответить | Цитировать Сообщить модератору |
ёёёёё Member Откуда: Сообщений: 1538 |
А почему ты его не используешь? Потому, что ты хочешь получать бэкап-файл на локальной (не серверной) машине, или еще почему-то? |
||||
28 сен 19, 17:29 [21981705] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
В том числе. Я уже писал раньше, что на текущий момент, пилящиеся под Лазарь IBX от mwasoftware, либо не удовлетворяют потребностям последних версий FB (например, legacy-компоненты, оставшиеся в составе этой библы от первоисточника, не имеют пропертей обработки ключей -fix_fss_d/fix_fss_m), либо еще сырые и дают ошибки коннекта, если сервер(а) (например, в винде) установлен(ы) и запущен(ы) не стандартным инсталлятором, а из архивов и вручную. Плюсуй сюда упертость автора, что продукт лучше развивать в соответствии с хотелками (в разумных пределах, конечно) пользователей, а не автора. Плюс независимость от нестандартных компонент доступа. В итоге получишь мои резоны :) |
||
28 сен 19, 17:51 [21981711] Ответить | Цитировать Сообщить модератору |
hvlad Member Откуда: Сообщений: 10691 |
|
||
28 сен 19, 17:59 [21981712] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
hvlad, Влад, спасибо за наводку. Пошел пилить дальше К сообщению приложен файл. Размер - 32Kb |
28 сен 19, 18:32 [21981722] Ответить | Цитировать Сообщить модератору |
Tonal Member Откуда: Новосибирск Сообщений: 180 |
Док, А вот в linux расширения .exe не будет. :) У TProcess есть свойство ProcessID, в котором этот самый pid и должен отдаватся. Кроме того, gbak, должен корректно отрабатывать прерывание по Ctrl+C - сигнал завершения. Т. е. ты ему по pid-у можешь послать сигнал завершения и он всё корректно закроет. Возможно TProcess так и делает по Terminate(), но можно и явно ручками послать через FpKill() |
28 сен 19, 18:47 [21981729] Ответить | Цитировать Сообщить модератору |
kdv Member Откуда: iBase.ru Сообщений: 28420 |
Док, госпидя. скопипастил из fibplus, и сделал свой клон, если автор ибх под лазарь такой дебил, что даже ключи почти десятилетней давности не может добавить в servapi. |
28 сен 19, 23:06 [21981822] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 48838 |
И эти люди ещё удивляются почему я использую API напрямую... Posted via ActualForum NNTP Server 1.5 |
||
29 сен 19, 00:08 [21981835] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
я не был столь категоричен :) он там много чего полезного (я надеюсь, все не щупал) наворотил
Но вот это
Свой клон делать - это надо программистом работать, вот выйду на пенсию :)
На стороне клиента TProcess.Terminate(), действительно, убивает gbak (кстати, на виндах метод вызывает TerminateProcess, а на линуксе FpKill). На винде огрызок файла бекапа все равно остается залоченным 30-60 сек, в линуксе можно сразу запускать и прерывать процесс бекапа бесконечно много раз.
Поэкспериментирую с удалением по MON$REMOTE_PID, потом отпишусь |
|||||||
29 сен 19, 00:52 [21981845] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
я не удивляюсь, я тебе завидую :) |
||
29 сен 19, 00:53 [21981846] Ответить | Цитировать Сообщить модератору |
Tonal Member Откуда: Новосибирск Сообщений: 180 |
Док, Здесь описано как правильно посылать Ctrl+C в винде. |
29 сен 19, 13:24 [21981969] Ответить | Цитировать Сообщить модератору |
kdv Member Откуда: iBase.ru Сообщений: 28420 |
только что проверил. Поменял порт у фб на 3217. Запустил ФБ. В Лазарусе коннект из IBXServicesConnection1 к localhost/3217:service_mgr отлично коннектится. Когда меняю на localhost/3218:service_mgr [Window Title] Ошибка [Content] Unable to complete network request to host "localhost". Failed to establish a connection [ОК] так что всё там работает. Ты просто или ФБ не запустил, или в конфиге ФБ не тот порт указал, или не рестартанул ФБ после изменения порта. |
||
29 сен 19, 23:20 [21982215] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
Вряд ли, у меня, как минимум, две версии сервера всегда крутятся. IBE доволен :). Вечерком проверю, конечно. А у тебя сервак запущен как приложение или как сервис? |
||||
30 сен 19, 08:03 [21982308] Ответить | Цитировать Сообщить модератору |
kdv Member Откуда: iBase.ru Сообщений: 28420 |
как приложение, но в случае tcp это не имеет никакого значения. |
||
30 сен 19, 11:17 [21982464] Ответить | Цитировать Сообщить модератору |
Док Member Откуда: Казань Сообщений: 6489 |
kdv, скорее всего, у тебя че-та в реестре или в переменных среды есть, чего нет у меня.
да и х@р с ним :) Будет время, отпишу ему |
||
30 сен 19, 15:15 [21982817] Ответить | Цитировать Сообщить модератору |
Мимопроходящий Member Откуда: бурятский тундрюк, эсквайр Сообщений: 30732 |
ГРАЖДАНЕ! вот нахрена вы оборачиваете значимую часть сообщения в СПОЙЛЕР?!! просто потому что "красиво"? ИЗАБЭЛЛА, йопть! зы: по nntp не читаемо. Posted via ActualForum NNTP Server 1.5 |
30 сен 19, 15:21 [21982828] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 вперед Ctrl→ все |
Все форумы / Firebird, InterBase | ![]() |