ElasticSearch::AnyEvent - async Perl client


(Clinton Gormley) #1

Hi all

For the Perl users out there:

I've just pushed ElasticSearch::AnyEvent - this brings async requests to
the Perl ElasticSearch client. It is still lacking proper documentation
and any tests, which will soon follow.

It is available on the anyevent branch on github:

http://github.com/clintongormley/ElasticSearch.pm/tree/anyevent

This is my first foray into async programming in Perl, so I'd appreciate
feedback on the API and code.

Briefly, it can be used as follows:

use ElasticSearch::AnyEvent();
my $es = ElasticSearch::AnyEvent->new(servers=>'127.0.0.1:9200');

Blocking

 my $cv = $es->current_server;
 print $cv->recv;

 # or

 print $es->current_server->recv

Callback

 my $cv = $es->current_server;
 $es->cb(sub {
     my $result = shift || die $@;
     ....
 });

Context

 my $cv = $es->current_server;
 undef $cv;                      # cancels

 $es->refresh_servers;           # fire-and-forget
 start_event_loop();

 {
    my $cv1 = $es->foo;
    my $cv2 = $es->foo;
    $cv2->cb(...);
 }
 # $cv1 is cancelled
 # $cv2 is backgrounded / fire-and-forget

Multitask:

 $es->multi_task(
     action      => 'index',
     pull_queue  => sub {
         # returns a list of HASHes to be passed to

$es->$action(...)
# can return (eg) 1000 at a time
},
on_success => sub { # optional
my ($args,$result) = @;
...
},
on_error => sub { # optional
my ($error,$args,$queue) = @
;
...
},
)->recv || die "Error";

thanks

Clint


(system) #2