summaryrefslogblamecommitdiff
path: root/lib/Net/Riak.pm
blob: 3210007035d8807a7e0a79e1b35d7d8682ae8baf (plain) (tree)
1
2
3
4
5
6
7
8
9




                             
 
                      
                      
                                                     




                                  
                         
                  
                                                                   



                            




                                                                    

                            



                           
                                                                                


            


               

                    
                                
                                        








                                

      



                                                                                     


                                                          



                  
       


             
                         
 
                             
 
                               
 

                                                     
             
 
                          
 



                                                  























                                            
                               


                                                        









                                                                                                    
              
 
             




                                                                                                                
               
 



                             

                                                 



                                                        
          
 

                                                        

                                       
           
 

                                     

                                       
          
 

                                                                             

                                       
             
 

                                                                       
                                       
 


                                           
 
                        
 
                              
 
               
 
                       
 
                    
 
                    
 
    
package Net::Riak;

# ABSTRACT: Interface to Riak

use Moose;

use Net::Riak::Client;
use Net::Riak::Bucket;
use Net::Riak::Types Client => { -as => 'Client_T' };

with 'Net::Riak::Role::MapReduce';

has client => (
    is       => 'rw',
    isa      => Client_T,
    required => 1,
    handles  => [qw/is_alive all_buckets server_info stats search/]
);

sub BUILDARGS {
    my ($class, %args) = @_;

    my $transport = $args{transport} || 'REST';
    my $trait = "Net::Riak::Transport::".$transport;

    my $client = Net::Riak::Client->with_traits($trait)->new(%args);
    $args{client} = $client;
    \%args;
}

sub bucket {
    my ($self, $name) = @_;
    my $bucket = Net::Riak::Bucket->new(name => $name, client => $self->client);
    $bucket;
}

1;

=head1 SYNOPSIS
    
    # REST interface
    my $client = Net::Riak->new(
        host => 'http://10.0.0.40:8098',
        ua_timeout => 900,
        disable_return_body => 1
    );

    # Or PBC interface.
    my $client = Net::Riak->new(
        transport => 'PBC',
        host => '10.0.0.40',
        port => 8080
    );

    my $bucket = $client->bucket('blog');
    my $obj    = $bucket->new_object('new_post', {title => 'foo', content => 'bar'});
    $obj->store;

    $obj = $bucket->get('new_post');
    say "title for ".$obj->key." is ".$obj->data->{title};

=head1 DESCRIPTION

=head2 ATTRIBUTES

=over 2

=item B<host>

REST: The URL of the node

PBC: The hostname of the node

default 'http://127.0.0.1:8098'

Note that providing multiple hosts is now deprecated.

=item B<port>

Port of the PBC interface.

=item B<transport>

Used to select the PB protocol by passing in 'PBC'

=item B<prefix>

Interface prefix (default 'riak')

=item B<mapred_prefix>

MapReduce prefix (default 'mapred')

=item B<r>

R value setting for this client (default 2)

=item B<w>

W value setting for this client (default 2)

=item B<dw>

DW value setting for this client (default 2)

=item B<client_id>

client_id for this client

=item B<ua_timeout (REST only)>

timeout for L<LWP::UserAgent> in seconds, defaults to 3.

=item B<disable_return_body (REST only)>

Disable returning of object content in response in a store operation.

If set  to true and the object has siblings these will not be available without an additional fetch.

This will become the default behaviour in 0.17 

=back

=head1 METHODS

=head2 bucket

    my $bucket = $client->bucket($name);

Get the bucket by the specified name. Since buckets always exist, this will always return a L<Net::Riak::Bucket>

=head2 is_alive

    if (!$client->is_alive) {
        ...
    }

Check if the Riak server for this client is alive

=head2 all_buckets

List all buckets, requires Riak 0.14+ or PBC connection.

=head2 add

    my $map_reduce = $client->add('bucket_name', 'key');

Start assembling a Map/Reduce operation

=head2 link

    my $map_reduce = $client->link();

Start assembling a Map/Reduce operation

=head2 map

    my $map_reduce = $client->add('bucket_name', 'key')->map("function ...");

Start assembling a Map/Reduce operation

=head2 reduce

    my $map_reduce = $client->add(..)->map(..)->reduce("function ...");

Start assembling a Map/Reduce operation

=head2 server_info (PBC only)
    
    $client->server_info->{server_version};

=head2 stats (REST only)

    say Dumper $client->stats;

=head1 SEE ALSO

L<Net::Riak::MapReduce>

L<Net::Riak::Object>

L<Net::Riak::Bucket>

=cut