Size: a a a

2020 December 24

VG

Vadim Goncharov in Modern::Perl
что оно делает?
источник

AK

Andrey Konovalov in Modern::Perl
Vadim Goncharov
что оно делает?
ae_run_seq 
  opt_key => value,
  another_key => ya_value,
  sub {
    my ($cb_chain, $ae_run_inst, @other_args) = @_;
  },
  sub {
    my ($cb_chain, $ae_run_inst, @other_args) = @_;

  };
источник

VG

Vadim Goncharov in Modern::Perl
а более развернутые примеры есть?
источник

AK

Andrey Konovalov in Modern::Perl
Vadim Goncharov
а более развернутые примеры есть?
Могу рабочий пример скрином
источник

AK

Andrey Konovalov in Modern::Perl
А. хотя не скрином тоже уже можно :)
источник

AK

Andrey Konovalov in Modern::Perl
Хаха
источник

AK

Andrey Konovalov in Modern::Perl
Vadim Goncharov
а более развернутые примеры есть?
источник

AK

Andrey Konovalov in Modern::Perl
Тут наверное тоже не очень понятно, до sub {}'ов внизу вставляется преамбула, которая создаёт пул, если его не было и вытаскивает из пула 1 соединение.

Собственно $ae_run_inst хранит $cv (если он вообще нужен) и hashref в свойстве hold, чтобы не разрушались объекты при переходах между коллбеками
источник

VG

Vadim Goncharov in Modern::Perl
вот да, словами не?
источник

b

basiliscos in Modern::Perl
это доморощенная композиция асинк-хэндлеров (в форме колбэков)? Типа:

async_op()->then(sub { })->then(sub {...});


?
источник

AK

Andrey Konovalov in Modern::Perl
basiliscos
это доморощенная композиция асинк-хэндлеров (в форме колбэков)? Типа:

async_op()->then(sub { })->then(sub {...});


?
Да
источник

VG

Vadim Goncharov in Modern::Perl
так бы сразу и сказал
источник

b

basiliscos in Modern::Perl
Я бы посоветовал на выходных выделить несколько часов и изучить возможности Future (или другого модуля, если кто посоветует). Я тоже им долго пренебрелал и писал на AE::cv, пока не открыл его для себя.
источник

AP

Anton Petrusevich in Modern::Perl
я извиняюсь, но, обычно, когда надо что-то подобное, то разумнее вместо ае смотреть на пое
источник
2020 December 25

AS

Alexey Stavrov in Modern::Perl
Всем привет.
Кто-нибудь использовал ZooKeeper в perl  с fork-ами?

Собрался использовать этот модуль https://metacpan.org/pod/Net::ZooKeeper.

Там есть такие замечания:

Note also that before invoking fork() to spawn a new process, all Net::ZooKeeper handles should be destroyed so that all connections to ZooKeeper are closed and all internal POSIX threads have exited. If a child process needs to communicate with ZooKeeper it should open its own private connections after it is created by fork().

и

On occasion the ZooKeeper client code may not be able to quickly reconnect to a live server and the caller may want to destroy the existing Net::ZooKeeper handle object and attempt a fresh connection using the same session ID as before with a new Net::ZooKeeper object. To do so, save the session_id attribute value before undefining the old handle object and then pass that binary string as the value of the 'session_id' option to the new() method when creating the next handle object. After the successful completion of a method which requires communication with the server, if the new handle object's session_id attribute value matches the old session ID then the session has been successfully maintained; otherwise, the old session was expired by the cluster.

Т.е. как я понял, если я хочу форкаться, то нужно пересоздать сессию.

Правда взять сессию из хендлера zookeeper-а и подсунуть его в новый хендлер не получается (сессия не продолжается + эфемерные узлы дохнут).

Код примерно такой:

my $zkh = Net::ZooKeeper->new('zoo1:2181');
...
my $session_id = $zkh->{session_id};
$zkh = Net::ZooKeeper->new('zoo1:2181', session_id => $session_id);
# в этот момент эфемерные узлы уже сдохли
...

Из документации zookeeper-а нашёл:
When a client gets a handle to the ZooKeeper service, ZooKeeper creates a ZooKeeper session, represented as a 64-bit number, that it assigns to the client. If the client connects to a different ZooKeeper server, it will send the session id as a part of the connection handshake. As a security measure, the server creates a password for the session id that any ZooKeeper server can validate.The password is sent to the client with the session id when the client establishes the session. The client sends this password with the session id whenever it reestablishes the session with a new server.

Выше написано про пароль к сессии, которого не знаю, где взять, чтобы продолжить сессию.

В попсовой библиотеке на питоне похоже пароль можно взять:
https://kazoo.readthedocs.io/en/latest/api/client.html#kazoo.client.KazooClient.client_id


Кто сталкивался с форками и zookeeper-ом можете подсказать, как правильно сделать, чтобы не было больно потом. Zookeeper хочу использовать в parent процессе, но судя по доке handler нужно всё равно уничтожать, если есть дочерние процессы.

Версия ZooKeeper-а 3.4.х
источник

YK

Yegor K in Modern::Perl
- вынести коннект через Net::ZooKeeper в отдельный форк и уже общаться с ним через ipc
- можно попробовать не закрывать соединение и в форках строго не пользоваться всем что связанно с handle-ом Net::ZooKeeper
- в Net::ZooKeeper session_id это и есть client_id
- когда handle штатно закрывается, то и сессия тоже, поэтому и нет эфемерных узлов
источник

AP

Anton Petrusevich in Modern::Perl
я подозреваю, проблема форка в том, что хендл дублируется и у меня всегда был вопрос как это работает с сокетами, посылается ли FIN+ACK из потомка, если он выполнит закрытие хендла родителя?
источник

AK

Andrey Konovalov in Modern::Perl
Anton Petrusevich
я подозреваю, проблема форка в том, что хендл дублируется и у меня всегда был вопрос как это работает с сокетами, посылается ли FIN+ACK из потомка, если он выполнит закрытие хендла родителя?
По идее в разделяемом между процессами сокете так не происходит.
источник

AP

Anton Petrusevich in Modern::Perl
Andrey Konovalov
По идее в разделяемом между процессами сокете так не происходит.
ну по идее да.
источник

AP

Anton Petrusevich in Modern::Perl
я думаю даже во всех его дубликатах не происходит: FIN+ACK должны посылаться когда последний хенлде закроется и только тогда будет закрываться соединение
источник