[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