Size: a a a

2021 June 28

АГ

Алексей Галаев... in Modern::Perl
Можешь зайти в группу по aiogram это питонячий модуль, но там можно поспрашивать в целом что и как делается с телеграммом.
источник

АГ

Алексей Галаев... in Modern::Perl
Может быть объяснят
источник

AF

Alexandre Frolov in Modern::Perl
Спасибо!
источник

VG

Vadim Goncharov in Modern::Perl
по идее должно быть достаточно официальной документации
источник

VG

Vadim Goncharov in Modern::Perl
от самой телеги
источник

VG

Vadim Goncharov in Modern::Perl
там же просто JSON, ну
источник

АГ

Алексей Галаев... in Modern::Perl
там только базис, сложные вещи в доке не найти, надо смотреть примеры
источник

AF

Alexandre Frolov in Modern::Perl
Да обчитался уже, но примеров на Перле нет, на Go только пулинг и очень примитивные
источник

АГ

Алексей Галаев... in Modern::Perl
Плюс, надо самому в голове уложить структуру, как оно должно быть)
источник

c

crux in Modern::Perl
Может кто меня ткнёт в очевидное (вопрос по перлу, если дочитать до конца, немного много букв, но лучше выложу полную картину ))):

Тестим фейловер постгреса, запущен процесс, который непрерывно читает из БД и если жёстко укладывать ноду (эм, неважно что там, там намешано балансеров, pg bouncer и т.д., не суть), то если смотреть нетстатом, коннект повисает в ESTABLISHED и приложение считает что всё норм и ждёт ответа.

Воспроизводится в том числе в подобном же питонячьем тестовом скрипте и если коннектиться через psql.

Причины всего этого понятны, и как-то надо бороться.

Уже прошли через тюнинг в системе

tcp_keepalive_time = 7200 (seconds)
tcp_keepalive_intvl = 75 (seconds)
tcp_keepalive_probes = 9 (number of probes)

уменьшали в тестовых целях, не помогает. Сейчас добрались до параметров libpq

https://www.postgresql.org/docs/13/libpq-connect.html

У которой, кроме всего прочего есть:

keepalives* (неважно, помогоает или нет) и 

tcp_user_timeout (помогает в питоне):

conn = psycopg2.connect(
   host='192.168....',
....
   tcp_user_timeout=5000
   )

Залипший коннект честно отваливается через 5 секунд.

Внимание, вопрос, как передать tcp_user_timeout в перле? Тестовый скрипт на моджо, но это не суть, что-то похоже, что DBD::Pg в принципе его игнорит.

pg      => "postgresql://$ENV{DB_USER}:$ENV{DB_PASSWD}\@$ENV{DB_HOST}:$ENV{DB_PORT}/$ENV{DB_NAME}?pg_server_prepare=0&tcp_user_timeout=5000"

не пашет. Питонисты ликуют, говорят что перл отстой и всё такое.
источник

VG

Vadim Goncharov in Modern::Perl
надо посмотреть в исходники питоновского модуля, если это опция сокета, добавить в DBD::Pg (а мож и есть, просто называется иначе)
источник

W

Warstone in Modern::Perl
В DBD::Pg эта настройка не прокинута на уровень Пг. Патчи приветствуются.
источник

W

Warstone in Modern::Perl
Хотя...
источник

W

Warstone in Modern::Perl
Попробуйте в dsa запихнуть
источник

c

crux in Modern::Perl
Судя по доке постгреса по идее это опция сокета, ибо:

It is only supported on systems where TCP_USER_TIMEOUT is available;

А вот с добавить в DBD::Pg сложнее, чет я там потерялся слегка в исходниках, судя по всему это должно быть где-то в

DBD::Pg::db::_login

И за 10 уже минут, я этот _login ещё не нашёл ))
источник

c

crux in Modern::Perl
В dsa? Я или забыл что это или не знал. В DSN пробовали
?pg_server_prepare=0&tcp_user_timeout=5000

не пашет
источник

VG

Vadim Goncharov in Modern::Perl
а кстати, на том конце-то процесс есть?
источник

c

crux in Modern::Perl
Нет, процесс убит условно из розетки.
источник

YK

Yegor K in Modern::Perl
если эта опция сокета, то можт применить её к
$dbh->{pg_socket}
источник

VG

Vadim Goncharov in Modern::Perl
тогда tcp_keepalive_time поможет, просто его нельзя делать слишком маленьким
источник