AnyEvent-Pg
view release on metacpan or search on metacpan
lib/AnyEvent/Pg/Pool.pm view on Meta::CPAN
package AnyEvent::Pg::Pool;
our $VERSION = '0.14';
use strict;
use warnings;
use 5.010;
use Carp qw(verbose croak);
use Data::Dumper;
use Method::WeakCallback qw(weak_method_callback);
use AnyEvent::Pg;
BEGIN {
*debug = \$AnyEvent::Pg::debug;
*_maybe_callback = \&AnyEvent::Pg::_maybe_callback;
};
our $debug;
sub _debug {
my $pool = shift;
my $connecting = keys %{$pool->{connecting}};
my $initializing = keys %{$pool->{initializing}};
my $idle = keys %{$pool->{idle}};
my $busy = keys %{$pool->{busy}};
my $delayed = ($pool->{delay_watcher} ? 1 : 0);
my $total = keys %{$pool->{conns}};
local ($ENV{__DIE__}, $@);
my ($pkg, $file, $line, $method) = (caller 0);
$method =~ s/.*:://;
warn "[$pool c:$connecting/i:$initializing/-:$idle/b:$busy|t:$total|d:$delayed]\@${pkg}::$method> @_ at $file line $line\n";
}
my %default = ( connection_retries => 3,
connection_delay => 2,
timeout => 30,
size => 1 );
sub new {
my ($class, $conninfo, %opts) = @_;
$conninfo = { %$conninfo } if ref $conninfo;
my $size = delete $opts{size} // $default{size};
my $connection_retries = delete $opts{connection_retries} // $default{connection_retries};
my $connection_delay = delete $opts{connection_delay} // $default{connection_delay};
my $timeout = delete $opts{timeout} // $default{timeout};
my $global_timeout = delete $opts{global_timeout};
my $on_error = delete $opts{on_error} ;
my $on_connect_error = delete $opts{on_connect_error};
my $on_transient_error = delete $opts{on_transient_error};
# my $on_empty_queue = delete $opts{on_empty_queue};
my $pool = { conninfo => $conninfo,
size => $size,
on_error => $on_error,
on_connect_error => $on_connect_error,
on_transient_error => $on_transient_error,
# on_empty_queue => $on_empty_queue,
timeout => $timeout,
max_conn_retries => $connection_retries,
conn_retries => 0,
conn_delay => $connection_delay,
global_timeout => $global_timeout,
conns => {},
current => {},
busy => {},
idle => {},
connecting => {},
initializing => {},
init_queue_ix => {},
queue => [],
( run in 2.423 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )