Clinton Gormley > ElasticSearch-Transport-AECurl-0.06 > ElasticSearch::Transport::AECurl

Download:
ElasticSearch-Transport-AECurl-0.06.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 0.06   Source  

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.

syntax highlighting: