Clinton Gormley

NAME

ElasticSearch::Transport::AECurl - AnyEvent::Multi::Curl (libcurl) backend for ElasticSearch

VERSION

version 0.06

SYNOPSIS

    use ElasticSearch;
    my $e = ElasticSearch->new(
        servers         => 'search.foo.com:9200',
        transport       => 'aecurl',

        timeout         => 30,
        max_concurrency => 0,
        proxy           => 'foo.bar.com',
        ip_resolve      => 4|6|undef,
    );

    # blocking request
    $e->cluster_health->recv;

    # non-blocking request
    $e->cluster_health->cb( sub {
        if ($@) {
            log "An error occurred: $@";
        } else {
            my $response = shift;
            log $response;
        }
    });
    AE::cv->recv();

    # fire-and-forget vs scoped
    {
        $e->delete_index(index => 'foo');
        $e->delete_index(index => 'bar')->cb( sub { print "Done"});
        my $cv = $e->delete_index(index=>'baz');
    }
    AE::cv->recv;
    #   - foo and bar will be deleted
    #   - baz will not be deleted

DESCRIPTION

ElasticSearch::Transport::AECurl uses AnyEvent::Multi::Curl (and thus libcurl) to talk to ElasticSearch asynchronously over HTTP.

USING AECurl

Any request to ElasticSearch returns an AnyEvent::CondVar. You have three options for how you use them:

Blocking

    $cv = $e->cluster_health;
    $result = $cv->recv;

When you call recv() on a CondVar, your program will block until that CondVar is ready to return a value.

If an error was thrown, then recv() will die. You will need to wrap recv() in eval if you don't want to die.

If your $cv goes out of scope, then the request will be aborted.

Callback

    $e->cluster_health->cb( sub {
        if ($@) {
            log "Error $@";
        }
        else {
            my $result = shift;
            log "$result"
        }
    })
    AE::cv->recv()

If you set a callback on a CondVar, then the callback will be called once the CondVar is ready (which will only happen after you start the event loop).

In the callback, $@ will contain any error, otherwise the result (if any) will be the first value in @_.

Once you set a callback on a CondVar, it will not be aborted when it goes out of scope.

Fire-and-Forget

    $e->delete_index(index=>'foo');

If a request is called in void context, then it will be executed once the event loop is started. No errors will be thrown, even if the request does not complete succesfully.

It will not be aborted with a change in scope, because there is no scope. If you exit the application without running an event loop, then any pending requests will not be run.

BLOCKING METHODS

"scrolled_search()" in ElasticSearch and "reindex()" in ElasticSearch will be executed synchronously.

SETTINGS

See AnyEvent::Curl::Multi for an explanation of the max_concurrency(), max_redirects(), proxy() and ip_resolve()

SEE ALSO

1;

AUTHOR

Clinton Gormley <drtech@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Clinton Gormley.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.




Hosting generously
sponsored by Bytemark