cybergrind
Окт. 23, 2008 12:11:31
ыыы… чет все посты сегодня однотипные у меня…. Event.wait()
DarkAnthey
Окт. 23, 2008 15:54:15
В моей проблеме ето не вариант (
Нада было сразу оговорить. Просто есть ситуация когда может повиснуть тред. а вернее сокет внутри треда.
Обработать ексепшн внутри треда не получиться потому что запрос к базе ждет ^C from pgsql. И ждать его может очень долго. Так как баз несколько и запросы проходят паралельно то отследить повисший тред трудновато. Можно повесить таймер на тред с запросом. Но даже после его срабатывания тред остаеться. Тред и connection к root master DB которая следит за тем какой запрос на какую подбазу попадет. В общем ето крайне не позитивно (
shiza
Окт. 23, 2008 19:57:58
А что такой за сокет, которому нельзя задать таймаут?
DarkAnthey
Окт. 23, 2008 20:19:41
Когда работаеш с PlProxy в Postgres если во время работы одна из баз вышла из стоя. То весь запрос подвисает. Он ждет ^C from pgsql. C умершей базы и ждет его долго.
Те подвисает сам запрос от PlProxy. Mainteiner Skype придумал приблуду для останова етого процесса. Но она еще стремная. В общем пока не вариант.
У меня все запросы к БД тредовые. Если системе не хватает коннекта к БД то она дабавляет коннекты по ходу работы. Теперь когда запрос подвис начинаются создаваться новые коннекты которые тоже начинают висеть. Что приводит к полному останову системы.
cybergrind
Окт. 25, 2008 14:02:14
ну хез, я бы делал все синхронные запросы с таймаутов, пофиг как, если PlProxy этого неумеет - то я бы задумался над сменой либы =)
нельзя сменить либу - прибивал бы саму либу по таймауту, и запускал бы заново.
По поводу тредов - делается пул, который не дает создавать больше определенного количества коннектов.
по поводу срабатывания таймаута и того, что тред остается живым - ггг, значит неправильно обрабатываете вылет по таймауту (хотя я ума немогу приложить чего там можно неправильно обработать).
вобщем можно повесить таймаут и на сокет, и на тред, суть проблемы - не ясна.
DarkAnthey
Окт. 26, 2008 19:35:42
Она и так не дает создать не больше определенного количества коннектов. Как ты остановиш тред котторый повис на запросе, сам в себе по тайм ауту или без него. Заменить не получиться, аналогов не много. А вернее один dblink но он тоже идет лесом. Потому что плохо выдерживает адскую нагрузу. Через lsof останавливать процесс с либой тоже не хочеться. Хотя думаю как выход есть только модификация самой либы. Но тоже так не хочеться туда лезть :(