Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7   вперед  Ctrl      все
 Корректное завершение gbak/isql при b/r  [new]
Док
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]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10213
Док,

для gbak можно было сразу воспользоваться ServiceAPI и получить полный контроль за всем происходящим.
28 сен 19, 16:15    [21981680]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
Симонов Денис
можно было сразу воспользоваться ServiceAPI

можно подробнее для гуманитария, что ты имел ввиду? :)
28 сен 19, 16:39    [21981690]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10691
Док,

MON$REMOTE_PID
28 сен 19, 16:42    [21981691]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10213
Док
можно подробнее для гуманитария, что ты имел ввиду? :)


в IBX лазаря нет IBBackupService?
28 сен 19, 16:48    [21981694]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
Симонов Денис
в IBX лазаря нет IBBackupService?

в данном случае я не использую его

hvlad
MON$REMOTE_PID

а как извлечь его из текущего соединения gbak? Есть какие-нибудь ключи? Или придется изучать низкоуровневой доступ к БД? :)
28 сен 19, 17:04    [21981695]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10691
Док,
когда ты запускал дочерний процесс, ты мог получить его PID.

Кстати
Док
Можно, конечно, вычислить "виновника" по MON$REMOTE_PROCESS, но в этом случае грохнутся соседние экземпляры моего приложения, которые в этом время будут делать что-то еще
твои приложения называются gbak.exe ? :)

PS PID - это process ID (на всякий)
28 сен 19, 17:09    [21981697]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
hvlad
когда ты запускал дочерний процесс, ты мог получить его PID.

ага, вот ты о чем! Я наивно полагал, что PID надо получать из таблиц мониторинга :)

Щас спрошу на лазаревском форуме, можно ли получить PID из TProcess.
28 сен 19, 17:27    [21981701]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
hvlad
твои приложения называются gbak.exe ? :)

:)
нет, конечно, но я сделал вывод по аналогии, глядя в таблицы MON$ATTACHMENTS двух запущенных экземпляров IBE
28 сен 19, 17:28    [21981703]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48838

Симонов Денис
воспользоваться ServiceAPI и получить полный контроль за всем происходящим.

Авотфиг. Там не то что "полного", там минимального контроля и то нет.

Posted via ActualForum NNTP Server 1.5

28 сен 19, 17:28    [21981704]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
ёёёёё
Member

Откуда:
Сообщений: 1538
Док
Симонов Денис
в IBX лазаря нет IBBackupService?

в данном случае я не использую его

А почему ты его не используешь? Потому, что ты хочешь получать бэкап-файл на локальной (не серверной) машине, или еще почему-то?
28 сен 19, 17:29    [21981705]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
ёёёёё
А почему ты его не используешь? Потому, что ты хочешь получать бэкап-файл на локальной (не серверной) машине, или еще почему-то?

В том числе.

Я уже писал раньше, что на текущий момент, пилящиеся под Лазарь IBX от mwasoftware, либо не удовлетворяют потребностям последних версий FB (например, legacy-компоненты, оставшиеся в составе этой библы от первоисточника, не имеют пропертей обработки ключей -fix_fss_d/fix_fss_m), либо еще сырые и дают ошибки коннекта, если сервер(а) (например, в винде) установлен(ы) и запущен(ы) не стандартным инсталлятором, а из архивов и вручную.

Плюсуй сюда упертость автора, что продукт лучше развивать в соответствии с хотелками (в разумных пределах, конечно) пользователей, а не автора. Плюс независимость от нестандартных компонент доступа. В итоге получишь мои резоны :)
28 сен 19, 17:51    [21981711]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
hvlad
Member

Откуда:
Сообщений: 10691
Док
я сделал вывод по аналогии, глядя в таблицы MON$ATTACHMENTS двух запущенных экземпляров
IBE
IBE не запускает gbak. Он использует Service API
28 сен 19, 17:59    [21981712]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
hvlad,

Влад, спасибо за наводку. Пошел пилить дальше

К сообщению приложен файл. Размер - 32Kb
28 сен 19, 18:32    [21981722]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Tonal
Member

Откуда: Новосибирск
Сообщений: 180
Док,

А вот в linux расширения .exe не будет. :)
У TProcess есть свойство ProcessID, в котором этот самый pid и должен отдаватся.
Кроме того, gbak, должен корректно отрабатывать прерывание по Ctrl+C - сигнал завершения.
Т. е. ты ему по pid-у можешь послать сигнал завершения и он всё корректно закроет.
Возможно TProcess так и делает по Terminate(), но можно и явно ручками послать через FpKill()
28 сен 19, 18:47    [21981729]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28420
Док,

госпидя. скопипастил из fibplus, и сделал свой клон, если автор ибх под лазарь такой дебил, что даже ключи почти десятилетней давности не может добавить в servapi.
28 сен 19, 23:06    [21981822]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48838

kdv
автор ибх под лазарь такой дебил

И эти люди ещё удивляются почему я использую API напрямую...

Posted via ActualForum NNTP Server 1.5

29 сен 19, 00:08    [21981835]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
kdv
если автор ибх под лазарь такой дебил, что даже ключи почти десятилетней давности не может добавить в servapi.

я не был столь категоричен :) он там много чего полезного (я надеюсь, все не щупал) наворотил
+
Картинка с другого сайта.

Но вот это
+
Картинка с другого сайта.
вкупе с необходимостью чего-то доказывать, напрочь отбивает охоту ими пользоваться

Свой клон делать - это надо программистом работать, вот выйду на пенсию :)

Tonal
Возможно TProcess так и делает по Terminate(), но можно и явно ручками послать через FpKill()

На стороне клиента TProcess.Terminate(), действительно, убивает gbak (кстати, на виндах метод вызывает TerminateProcess, а на линуксе FpKill). На винде огрызок файла бекапа все равно остается залоченным 30-60 сек, в линуксе можно сразу запускать и прерывать процесс бекапа бесконечно много раз.
+
Картинка с другого сайта.

Картинка с другого сайта.


Поэкспериментирую с удалением по MON$REMOTE_PID, потом отпишусь
29 сен 19, 00:52    [21981845]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
Dimitry Sibiryakov
И эти люди ещё удивляются почему я использую API напрямую...

я не удивляюсь, я тебе завидую :)
29 сен 19, 00:53    [21981846]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Tonal
Member

Откуда: Новосибирск
Сообщений: 180
Док,

Здесь описано как правильно посылать Ctrl+C в винде.
29 сен 19, 13:24    [21981969]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
kdv
Док
Но вот это вкупе с необходимостью чего-то доказывать, напрочь отбивает охоту ими пользоваться

так что всё там работает. Ты просто или ФБ не запустил, или в конфиге ФБ не тот порт указал, или не рестартанул ФБ после изменения порта.

Вряд ли, у меня, как минимум, две версии сервера всегда крутятся. IBE доволен :). Вечерком проверю, конечно.

А у тебя сервак запущен как приложение или как сервис?
30 сен 19, 08:03    [21982308]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28420
Док
А у тебя сервак запущен как приложение или как сервис?

как приложение, но в случае tcp это не имеет никакого значения.
30 сен 19, 11:17    [21982464]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Док
Member

Откуда: Казань
Сообщений: 6489
kdv,

скорее всего, у тебя че-та в реестре или в переменных среды есть, чего нет у меня.
+
Attempting to connect to:
localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB... Connected successfully.
Server version: WI-V6.3.7.18553 Firebird 2.1
 
Disconnecting from database... Passed!
 
Attempting to connect to services manager:
localhost/3217:service_mgr... Connected successfully.
+ cmd
C:\Users\leyba>cd /d D:\Portable_program\Firebird_server\Firebird_2_1_7\bin\

D:\Portable_program\Firebird_server\Firebird_2_1_7\bin>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB' user sysdba password 'cooladmin';
Database:  'localhost/3217:D:\Archive\Databases\general_base\FB_2_1\GENERAL_BASE_4X_2016_03_30.FDB', User: sysdba
SQL> show version;
ISQL Version: WI-V2.1.7.18553 Firebird 2.1
Server version:
Firebird/x86/Windows NT (access method), version "WI-V2.1.7.18553 Firebird 2.1"
Firebird/x86/Windows NT (remote server), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
Firebird/x86/Windows NT (remote interface), version "WI-V2.1.7.18553 Firebird 2.1/tcp (leyba-pc)/P11"
on disk structure version 11.1

да и х@р с ним :)
Будет время, отпишу ему
30 сен 19, 15:15    [21982817]     Ответить | Цитировать Сообщить модератору
 Re: Корректное завершение gbak/isql при b/r  [new]
Мимопроходящий
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 Ответить