AnyEvent-Pg-Pool-Multiserver
view release on metacpan or search on metacpan
lib/AnyEvent/Pg/Pool/Multiserver.pm view on Meta::CPAN
package AnyEvent::Pg::Pool::Multiserver;
our $VERSION = '0.4';
use strict;
use warnings;
use utf8;
use v5.10;
use Carp qw( croak carp );
use AnyEvent;
use AnyEvent::Pg::Pool;
use Future;
use Params::Validate qw( validate_with );
use fields qw(
pool
local
);
use Class::XSAccessor {
getters => {
local => 'local'
},
};
sub new {
my $class = shift;
my $params = {@_};
my $self = fields::new( $class );
$params = $self->_validate_new( $params );
my $pool = {};
foreach my $server ( @{ $params->{servers} } ) {
my $dbh = AnyEvent::Pg::Pool->new(
$server->{conn},
connection_retries => 10,
connection_delay => 1,
size => 4,
on_error => sub { carp 'Some error'; },
on_transient_error => sub { carp 'Transient error'; },
on_connect_error => sub { carp 'Connection error'; },
);
croak 'server_id must be unique' if $pool->{ $server->{id} };
$pool->{ $server->{id} } = { dbh => $dbh, name => $server->{name}, id => $server->{id} };
}
$self->{pool} = $pool;
$self->{local} = $params->{local};
return $self;
}
sub _validate_new {
my __PACKAGE__ $self = shift;
my $params = shift;
$params = validate_with(
params => $params,
spec => {
servers => 1,
local => 1,
},
( run in 0.662 second using v1.01-cache-2.11-cpan-39bf76dae61 )