[Moscow.pm] Реконнект в DBI в случае потери соединения

Sergey Aleynikov sergey.aleynikov на gmail.com
Сб Мар 27 03:50:12 PDT 2010


Hello,

Я для постгри использую следующий код (урезанный вариант), т.к.
автоматические средства плохо работают с
форком/транзакциями/восстановлением запроса:

sub exec_sp{
        my $self = shift;
        my $proc = shift;

        my $result = $self->{'sth'}->{$proc}->execute(@_);

        if (!$result){
                if ($self->{'sth'}->{$proc}->errstr =~ /^no connection/){
#         ^^^^^^  вот в этой строчке надо поменять условие для mysql'я
                        log_message("DB_err: discovered disconnect,
trying to recover");

                        undef $self->{'dbh'};
                        $self->connect();
#            ^^^^^ вызовет DBI->connect

                        return $self->exec_sp($proc, @_);
#           ^^^^^ единственная проблема - тут не стоит задержек на
переподключение/ограничение рекурсии
#                   возможно, что-то следует добавить
                }

                return undef;
        }else{
                return $self->{'sth'}->{$proc};
        }
}


Best regards,
Sergey Aleynikov


Подробная информация о списке рассылки Moscow-pm