Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
Всем доброго дня,

согласно доке id процесса CLIENT_PID был добавлен в RDB$GET_CONTEXT начиная с версии 2.5.3.
Есть ли возможность получить его в версиях ниже 2.5.3 но не ниже 2.1?

Спасибо
19 окт 21, 12:26    [22385425]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Dimitry Sibiryakov
Member

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

Да. Бэкпортируй соответствующий коммит и используй эту свою собственную сборку.

Posted via ActualForum NNTP Server 1.5

19 окт 21, 12:31    [22385428]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
Dimitry Sibiryakov

Да. Бэкпортируй соответствующий коммит и используй эту свою собственную сборку.


в этом случае проще обновиться до 2.5.9. Речь идёт о клиентских машинах (которых много, и на некоторых по моей информации встречается ещё версия 2.5.1 а возможно и 2.1 хотя конечно 2.1 маловероятна).
19 окт 21, 12:42    [22385430]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Dimitry Sibiryakov
Member

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

Заставь своё приложение устанавливать переменную со своим PID. Костыль как раз в
твоём духе.

Posted via ActualForum NNTP Server 1.5

19 окт 21, 12:46    [22385433]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
Dimitry Sibiryakov

Заставь своё приложение устанавливать переменную со своим PID. Костыль как раз в
твоём духе.

тут как раз попытка уйти от правки всех модулей, а это как раз и потребует сей правки.
Я так понимаю иначе никак PID не получить потому что его физически в 2.5.1 нигде нет?
19 окт 21, 12:56    [22385442]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
kdv
Member

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

есть 2 момента. В суб-релизе 2.5.3 были добавлены переменные
SYSTEM::CLIENT_PID and SYSTEM::CLIENT_PROCESS.

Но это переменные.

А так те же значения должны быть в столбцах
mon$attachments
- MON$REMOTE_PID (remote client process ID)
- MON$REMOTE_PROCESS (remote client process pathname)

Эти столбцы есть и в 2.1 (точно).
Другое дело, что если эти столбцы есть, но они пустые, то это значит что клиентская либа древняя,
которая эти данные серверу передавать не умеет (до версии 2.1).
Либо, эти столбцы не заполняются при коннектах из .net и Java (т.к. к серверу они лезут сами, а авторы этих драйверов как-то игнорируют эти данные).

Так что - на сервере ты указанные переменные можешь получить в 2.5.3, не раньше. Или можешь получить эти данные из mon$, хоть с 2.1. А вот заполняет эти данные с клиентской стороны только клиент 2.1, не меньше.

Как-то так.

p.s. по идее, CLIENT_PID и CLIENT_PROCESS могут заполняться не так как mon$, поэтому обращение к ним менее влияет на производительность, чем заполнение mon$ при первом обращении в транзакции. Но тут я не в курсе конкретной реализации.
19 окт 21, 13:40    [22385464]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

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

спасибо за обстоятельный ответ.
Вариант с mon$attachments вполне подходит. Клиентская либа там точно правильная и из .net или Java тоже точно нет.

Спасибо!
19 окт 21, 13:57    [22385475]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30244
hlopotun
Вариант с mon$attachments вполне подходит.

тут надо быть бдительным - не дрюкать слишком часто, а то на 2.5 и тем более на классике может просаживать (в момент сбора данных mon$).
19 окт 21, 14:50    [22385496]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 11465
kdv
Либо, эти столбцы не заполняются при коннектах из .net и Java (т.к. к серверу они лезут сами, а авторы этих драйверов как-то игнорируют эти данные).
До Java 8 (включительно) нет штатного способа узнать идентификатор процесса JVM, в которой работает java-приложение.

Сообщение было отредактировано: 19 окт 21, 15:09
19 окт 21, 15:09    [22385506]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
kdv
hlopotun
Вариант с mon$attachments вполне подходит.

тут надо быть бдительным - не дрюкать слишком часто, а то на 2.5 и тем более на классике может просаживать (в момент сбора данных mon$).


т.е. лучше создать GTT уровня соединения с базой в триггере соединения, запихать туда IP и PID один раз и таскать их оттуда в рамках этого соединения?
19 окт 21, 15:26    [22385515]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Симонов Денис
Member

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

зачем? Пиши через RDB$SET_CONTEXT в переменную уровня сессии
19 окт 21, 15:27    [22385516]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Шавлюк Евгений
Member

Откуда: Одесса
Сообщений: 610
hlopotun,

rdb$set_context('USER_SESSION', 'PID', ....)
rdb$set_context('USER_SESSION', 'IP', ....)
19 окт 21, 15:28    [22385518]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
Шавлюк Евгений
hlopotun,

rdb$set_context('USER_SESSION', 'PID', ....)
rdb$set_context('USER_SESSION', 'IP', ....)


и это будет работать в 2.5.1?
19 окт 21, 15:30    [22385519]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
Шавлюк Евгений
Member

Откуда: Одесса
Сообщений: 610
hlopotun,

Сколько времени надо чтобы проверить?
19 окт 21, 15:31    [22385520]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hlopotun
Member

Откуда:
Сообщений: 673
Шавлюк Евгений
hlopotun,

Сколько времени надо чтобы проверить?


sorry, в доке: Эти функции были добавлены в Firebird в версии 2.0.

Сообщение было отредактировано: 19 окт 21, 15:34
19 окт 21, 15:33    [22385522]     Ответить | Цитировать Сообщить модератору
 Re: Как получить RDB$GET_CONTEXT ('SYSTEM','CLIENT_PID') в Firebird версии ниже 2.5.3?  [new]
hvlad
Member

Откуда:
Сообщений: 11551
hlopotun
создать GTT уровня соединения с базой в триггере соединения
Независимо от темы и прочего обсуждения - это чушь полная.
Надеюсь это был просто поток сознания бессознательного.
19 окт 21, 16:32    [22385547]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить