AnyEvent-Pg
view release on metacpan or search on metacpan
lib/AnyEvent/Pg/Pool.pm view on Meta::CPAN
$pool->_check_queue;
}
package AnyEvent::Pg::Pool::Watcher;
sub _new {
my ($class, $obj) = @_;
my $watcher = \$obj;
bless $watcher, $class;
}
sub DESTROY {
my $watcher = shift;
my $obj = $$watcher // {};
$obj->{canceled} = 1;
}
package AnyEvent::Pg::Pool::QueryWatcher;
our @ISA = ('AnyEvent::Pg::Pool::Watcher');
sub DESTROY {
my $watcher = shift;
my $obj = $$watcher // {};
$obj->{canceled} = 1;
# delete also the watcher for the slave query sent to the conn
# object:
delete $obj->{watcher};
}
package AnyEvent::Pg::Pool::ListenerWatcher;
our @ISA = ('AnyEvent::Pg::Pool::Watcher');
1;
=head1 NAME
AnyEvent::Pg::Pool
=head1 SYNOPSIS
my $pool = AnyEvent::Pg::Pool->new($conninfo,
on_connect_error => \&on_db_is_dead);
my $qw = $pool->push_query(query => 'select * from foo',
on_result => sub { ... });
my $lw = $pool->listen('bar',
on_notify => sub { ... });
=head1 DESCRIPTION
*******************************************************************
*** ***
*** NOTE: This is a very early release that may contain lots of ***
*** bugs. The API is not stable and may change between releases ***
*** ***
*******************************************************************
This module handles a pool of databases connections, and transparently
handles reconnection and reposting queries when network and server
errors occur.
=head2 API
The following methods are provided:
=over 4
=item $pool = AnyEvent::Pg::Pool->new($conninfo, %opts)
Creates a new object.
Accepts the following options:
=over 4
=item size => $size
Maximum number of database connections that can be simultaneously
established with the server.
=item connection_retries => $n
Maximum number of attempts to establish a new database connection
before calling the C<on_connect_error> callback when there is no other
connection alive on the pool.
=item connection_delay => $seconds
When establishing a new connection fails, this setting allows to
configure the number of seconds to delay before trying to connect
again.
=item timeout => $seconds
When some active connection does not report activity for the given
number of seconds, it is considered dead and closed.
=item global_timeout => $seconds
When all the connections to the database become broken and it is not
possible to establish a new connection for the given time period the
pool is considered dead and the C<on_error> callback will be called.
Note that this timeout is approximate. It is checked every time a new
connection attempt fails but its expiration will not cause the
abortion of an in-progress connection.
=item on_error => $callback
When some error happens that can not be automatically handled by the
module (for instance, by requeuing the current query), this callback
is invoked.
=item on_connect_error => $callback
When the number of failed reconnection attempts goes over the limit,
this callback is called. The pool object and the L<AnyEvent::Pg>
object representing the last failed attempt are passed as arguments.
( run in 1.593 second using v1.01-cache-2.11-cpan-39bf76dae61 )