The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"DBI постоянное соединение"
Отправлено krpsh, 06-Июн-16 12:52 
> наверное не "while (1) " а "while ($connect_db)"
> потом, если все таки "while (1)" (что вообще говоря порочно в данном
> случае)
> то первой строкой цикла должна быть проверка на $connect_db и выход из
> цикла если не успешна..
> Ну и наконец... вы отошли от атомарных операций в своем скрипте.
> Почему вы не хотите устанавливать соединение каждый раз при необходимости записи?
> создали соединение - записали-вышли.
> Через 5 секунд повторили итерацию.

если Вы говорите про полный скрипт из пятого сообщения то:
1)там в цикле while ($while_is_enabled), а $while_is_enabled - это как раз и есть условие выхода из цикла, просто я не писал условия установки его в 0 (там много всего).
2)первой строкой цикла и есть $dbh = check_connect_db($dbh);
идет проверка доступности соединения, и если оно не доступно, то $connect_db, до тех пор
пока не подлючится
3)на самом деле установка соединения перед каждой итерацией не решит проблему глобально
ведь проблема в том, что $dbh->ping, не возвращает false при обрыве соединения, а просто скрипт "виснет" (и висит, висит ...) при вызове этого метода.
Если мы будем устанавливать соединенние при каждой итерации, то это решит проблему при вставке первой строки из стрех (там в одной транзакции вставляются три тсроки), а если связь пропадет между вставкой 1-й и 2-й строки, то что тогда.
По идее в таком случае, медод execute должен вернуть ошибку, но он этого не делает, а скрипт просто виснет, как и при ping.

В общем, подводя итог - проблема в том, что при обрыве связи, обращение к любому методу $dbh ведет к зависанию скрипта, а не к ошибке выполнения метода.
И выход только один, оборачивать каждое обращение к базе в таймаут.
(вот тут написано об этом же http://www.opennet.ru/openforum/vsluhforumID9/6774.html)
Я уже определился с модулем для этого https://metacpan.org/pod/Sys::SigAction, функция timeout_call.
Но, честно говоря, это не очень удобно :-(

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру