|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
kdvТы это из процедур, функций, udf и прочего никак не можешь выполнить аналогичную проверку, или использовать подобный механизм для проверки блокированности своих объектов (мютексов, семафоров и проч). Потому что серверу наплевать на твои объекты. А кроме активного коннекта эти объекты проверять и блокировать-разблокировать больше некому. Еще раз привожу пример: - коннект выполняет функцию блокировки мютекса - коннект (процесс) отваливается. - мютекс заблокирован, а кто его заблокировал (и жив он или нет) - неизвестно. аминь. И снять такую блокировку можно по таймауту. Но вот проблема - у мютекса нет свойства "время блокировки".Проблема, в большей степени, обходится созданием собственных объектов блокировки в разделяемой памяти со штампом времени и фиксированным маленьким таймаутом (к примеру, 500мс), но начинает упираться в накладные расходы на маршалинг при вызове какой-нибудь UDF функции, типа hold_lock(:hndl_lock, CURRENT_TRANSACTION), продлевающей блокировку, а также сильно упираться в использование транзакций wait. Последнее вовсе начисто отбивает желание самостоятельной реализации через UDF, так как любая блокировка записей в конкурирующей транзакции, дольше заданного времени, приведет к автоматической разблокировки ресурса и неопределенному дальнейшему поведению. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 09:39 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
miwaonlineТаблоид ее когда-то давно решал. В академических целях, как у него обычно водится :)Так и я больше в академических целях, так как никто подобных задач передо мной не ставит, а свою собственную мысль не загонишь исключительно в рамки тех.заданий. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 09:41 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev а свою собственную мысль не загонишь исключительно в рамки тех.заданий.А как же ты тогда свои тех. задания пишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 10:06 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
YuRock, чукча не писатель, чукча читатель. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 10:11 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Нашел решение Таблоида (самому интерессно стало): 18162493 . ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 10:20 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_devYuRock, чукча не писатель, чукча читатель. Ну а когда для себя что-то пишешь или для души? Или большой неописанный в тз кусок? Ты что, алгоритм хотябы вначале не описываешь? Что и как работать будет в будущем твоем творении? Ведь именно законченное, проработанное тз и экономит время и ресурсы. Быстрее сначала продумать и написать алгоритм (на русском языке, например), а потом закодить его спокойно и уверенно, чем сразу бросаться кодить пальцем в небо и затем либо переделывать 5 раз либо грабли и костыли оставлять. Наподобие внешних блокировок функций работы СУБД :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 10:47 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
miwaonline, в принципе, то же самое и тоже без порта, но мне не понятно нафига там обращение к MON$IO_STAT и это: select a.mon$server_pid + 0*(select count(*) from rdb$types,rdb$types) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 10:50 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev, читай комментарий dimitr выше втом топике ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 11:02 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev, теперь заверни это все в триггеры on commit/on rollback, и получи тормоза (как и было у Таблоида). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 11:23 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
извращение с (select count(*) from rdb$types,rdb$types) IMHO лишнее, на момент любого опроса MON$-таблиц всегда должно было произойти как минимум одно страничное чтение и/или одна страничная запись. И уж точно более одного страничного фетча. Т.е. если в MON$IO_STATS для БД ноль, то это точно CS/SC, в SS такого быть не должно в принципе. Выполнять холостые 10000 чтений из RDB$TYPES это слишком дорогая перестраховка. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 11:25 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
kdv, по сути архитектуру надо определить один раз в ON CONNECT триггере и запомнить её в контекстной переменной, а потом получать её от туда. Но решение с MON$ всё равно не очень, по крайней мере в 2.5, ибо может замедлить коннект. В системах где частые и короткоживущие коннекты это смерти подобно. В 3.0 с MON$ уже лучше. Кроме того можно сделать функцию, которая получает архитектуру по требованию и кеширует это значение в тех же контекстных переменных, вместо размещения в ON CONNECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 11:32 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
miwaonline, попробовал сделать "красившэ": Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
но в ХП с EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE исключения db__xIamSS и db__xIamCS не поймать через WHEN EXCEPTION ... DO. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 13:29 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
kdvтеперь заверни это все в триггеры on commit/on rollback, и получи тормоза (как и было у Таблоида). Нафига их заворачивать в эти триггеры? Не проще сделать это в триггере ON CONNECT и сохранить через RDB$SET_CONTEXT ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 13:33 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Симонов Денис, опередил. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 13:35 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Вообще странно, что нельзя отловить пользовательское исключение из EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE. "Триггера на события CONNECT и DISCONNECT выполняются в специально созданной для этого транзакции. Если при обработке триггера не было вызвано исключение, то транзакция подтверждается. Не перехваченные исключения откатят транзакцию и: • в случае триггера на событие CONNECT соединение разрывается, а исключения возвращается клиенту;" Пусть не по имени исключения, так как исключение выброшено не в текущем подключении к БД, но, хотя бы, по номеру. Вот как-то так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 14:18 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_devВообще странно, что нельзя отловить пользовательское исключение из EXECUTE STATEMENT ... ON EXTERNAL DATA SOURCE.??? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 14:21 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
hvlad, на оба исключения (db__xIamSS и db__xIamCS) я получаю только GDSCODE = 335544921 и SQLSTATE = '42000' ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 14:27 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev, решения у тебя какие-то проктостоматологические мягко говоря ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 14:28 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Симонов Денис, а это и не решения вовсе. Так... Мысли вслух. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 14:29 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_devhvlad, на оба исключения (db__xIamSS и db__xIamCS) я получаю только GDSCODE = 335544921 и SQLSTATE = '42000'А почему ты решил, что должен получить что-то другое ? Ты доку по EXEC STMT читал ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 15:51 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 7 июля 2016 г. 15:54:57: Симонов Денис> решения у тебя какие-то проктостоматологические мягко говоряprofession de foi... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 15:56 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
hvladА почему ты решил, что должен получить что-то другое ? Ты доку по EXEC STMT читал ?? "Каждое исключение, вызванное оператором, возвращает eds_connection или eds_statement ошибки. Для обработки исключений в коде PSQL вы должны использовать WHEN GDSCODE eds_connection, WHEN GDSCODE eds_statement или WHEN ANY." Это понятно, но хотелось бы как-то ловить... Прекрасно вижу сообщение об ошибке, выплюнутое из ХП SERVER_MODE, и пойманное на клиенте (в IBExpert): 335544517: exception 11 335544382: DB__XIAMSS 335544382: Я супер сервер! а поймать не могу. :( Эх, если бы была какая-нибудь функция типа EXCEPTION(nestLevel), способная возвращать номер исключения из соединений соединения внешнего провайдера... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 16:47 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev, зачем вся эта проктостоматология? Почему EDS просто не может вернуть имя архитектуры? Подумай головным мозгом как перехватить исключения которых нет в твоей базе. Ведь EDS может подключаться не только к самой себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 17:00 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
rdb_dev, кстати зачем тебе потребовал определить архитектуру? Это всё твоя шальная затея с мьютексами что ли? Все решения должны проектироваться так чтобы они работали независимо от архитектуры сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 18:48 |
|
Кто как решал задачу определения архитектуры сервера v2.5 (Classic/Superserver) из ХП?
|
|||
---|---|---|---|
#18+
Симонов Денисзачем вся эта проктостоматология? Почему EDS просто не может вернуть имя архитектуры?Хотя бы затем, чтобы, в данном случае, максимально ограничить и обезопасить "подключение" пользователя SERVER_MON_USER. Чтобы не ставить под угрозу целостность данных на сервере ФБ даже при отсутствие DMZ зоны за грамотно настроенным брандмауэром и наличие в сети хакера с инструментом ARP spoofing'а. Симонов ДенисПодумай головным мозгом как перехватить исключения которых нет в твоей базе. Ведь EDS может подключаться не только к самой себе.Я уже писал, что это можно сделать по номеру исключения, а как я этот номер буду интерпретировать - мои проблемы. Например: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2016, 18:55 |
|
|
start [/forum/topic.php?fid=40&msg=39269557&tid=1562091]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 164ms |
0 / 0 |