Size: a a a

2020 November 17

AM

Alexander Makarov in Yii Framework 3
Да, тогда не стоит это тащить в Connection, наверное. Надо ловить исключение и делать реконнект.
источник

AS

Alexey Samoylov in Yii Framework 3
в yii2 я делал так
источник

AM

Alexander Makarov in Yii Framework 3
Ну это вроде тоже не гарантия.
источник

AM

Alexander Makarov in Yii Framework 3
Отвалиться может же уже в процессе exec...
источник

AS

Alexey Samoylov in Yii Framework 3
конечно нет, но на 99.99% закрыло вопрос
источник

NO

Nex Otaku in Yii Framework 3
И удвоило количество запросов к бд)
источник

AS

Alexey Samoylov in Yii Framework 3
Nex Otaku
И удвоило количество запросов к бд)
select 1 бесплатный, считай
источник

SI

Sergei Iamskoi in Yii Framework 3
К каждому запросу добавлять еще один для проверки коннекта - точно не вариант 🙂 Остаются да, только некие сервисы-обертки которые это дело будут контролировать. Но хотелось это как-то красиво через коннекшен оформить, а получается там даже надо в Command лезть)
источник

SI

Sergei Iamskoi in Yii Framework 3
Alexey Samoylov
select 1 бесплатный, считай
А если их 60 тысяч в сек?:)
источник

AS

Alexey Samoylov in Yii Framework 3
Sergei Iamskoi
А если их 60 тысяч в сек?:)
тогда там не будет pdo и mysql
источник

NO

Nex Otaku in Yii Framework 3
Я писал класс RetriableConnection, в котором дëргал тот же селект но только после долгих участков в скрипте.
источник

NO

Nex Otaku in Yii Framework 3
В принципе никто не мешает написать простой код который будет отслеживать время последнего запроса отправленного через коннекшен. Если превысило лимит то пингуем, если нет то просто отправляем запрос.
источник

m

mj4444 in Yii Framework 3
Sergei Iamskoi
Я уже поковырял коннекшен, похоже он мне тоже не сильно поможет, даже без final - слишком много переопределять придется. Проблема не совсем типовая: приложение не умирающее, живет в памяти с помощью RoadRunner. И ждет на сокете подключения клиента. Таких воркеров 1000. В один момент, с базой что-нибудь случилось, или с сетью - не важно, коннешен к ней умер и сразу поднялся. И во всех 1000 инстансах приложения, в уже существующих $connection->pdo связь оборвана, но это никак не возможно ни проверить, ни обработать на уровне класса Connection. isActive проверяет только инстанцирования PDO - оно есть, а подлючение в нем уже нет. Думал сделать какую-нить обертку и в ней в случае падения запроса пробовать пересоздавать подключение, и если не удалось - то уже эксепшен. Но похоже придется все это обрабатывать на уровне репозитория (( Но даже тут проблема в том, что  методы open и close в ConnectionInterface не поисаны, сейчас на это PR сделаю. Если есть идеи как такую ситуацию можно обработать - будет интересно выслучашть.
Используйте методы open и close без интерфейса.

Посмотрите:
https://github.com/yiisoft/db/blob/bc544876a4f835f635ff8714161373995c34829c/src/Command/Command.php#L1492

Для RoadRunner я бы использовал spiral/database.
источник

SI

Sergei Iamskoi in Yii Framework 3
Nex Otaku
В принципе никто не мешает написать простой код который будет отслеживать время последнего запроса отправленного через коннекшен. Если превысило лимит то пингуем, если нет то просто отправляем запрос.
Это не решение в таком кейсе. Между первым и вторым запросом могло пройти 3 секунды, в которые “мигнуло” подключение к базе. И у всех воркеров завалилось подключение, но они об этом не знают. А решение по подключению по таймауту в RR решено через idlettl -  может кому пригодится.
источник

NO

Nex Otaku in Yii Framework 3
Sergei Iamskoi
Это не решение в таком кейсе. Между первым и вторым запросом могло пройти 3 секунды, в которые “мигнуло” подключение к базе. И у всех воркеров завалилось подключение, но они об этом не знают. А решение по подключению по таймауту в RR решено через idlettl -  может кому пригодится.
Если 3 секунды прошло значит лимит превышен.
источник

NO

Nex Otaku in Yii Framework 3
Ладно, ерундовая проблема на самом деле. Хотя я признаю что в пыхе решать её неудобно.
источник

SI

Sergei Iamskoi in Yii Framework 3
mj4444
Используйте методы open и close без интерфейса.

Посмотрите:
https://github.com/yiisoft/db/blob/bc544876a4f835f635ff8714161373995c34829c/src/Command/Command.php#L1492

Для RoadRunner я бы использовал spiral/database.
Хм, retryHandler хорошее было бы решение. Только он протектед, сеттер тоже протектед, а сам Command захардкожен в AbstractConnection, а сам PostgresConnection финальный 🙂 Или я что-то упустил?
источник

SI

Sergei Iamskoi in Yii Framework 3
Nex Otaku
Ладно, ерундовая проблема на самом деле. Хотя я признаю что в пыхе решать её неудобно.
Идеально решение - метод в PDO, который будет говорить о текущем состоянии подключения:) Все были бы довольны)
источник

NO

Nex Otaku in Yii Framework 3
Ага. Но авторам пыхи приятнее аннотации обсуждать...
источник

AS

Alexey Samoylov in Yii Framework 3
Идеально пдо эксепшны ловить и ретраить с нужной стратегией, а все остальное не идеально
источник