From 0d2e13486e84b20992a6a5d35b3c445a32eb22a9 Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Tue, 9 Nov 2010 09:04:55 +0000 Subject: support for adding bucket as objects in add method --- lib/Net/Riak/MapReduce.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/Net/Riak/MapReduce.pm b/lib/Net/Riak/MapReduce.pm index 8ebe563..d05c30a 100644 --- a/lib/Net/Riak/MapReduce.pm +++ b/lib/Net/Riak/MapReduce.pm @@ -56,8 +56,10 @@ sub add { } if (!scalar @_) { - if (blessed($arg)) { + if ($arg->isa('Net::Riak::Object')) { $self->add_object($arg); + } elsif ($arg->isa('Net::Riak::Bucket')) { + $self->add_bucket($arg->name); } else { $self->add_bucket($arg); } @@ -164,6 +166,7 @@ sub run { $job->{timeout} = $timeout; } + my $content = JSON::encode_json($job); my $request = $self->client->new_request( @@ -253,7 +256,7 @@ The MapReduce object allows you to build up and run a map/reduce operations on R =head2 add -arguments: bucketname or arrays or L +arguments: L / Bucket name / L / Array return: a Net::Riak::MapReduce object -- cgit 1.4.1 From f743f767969331089097397053f21dcd4a442ef0 Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Tue, 9 Nov 2010 09:45:57 +0000 Subject: added delete_object method --- lib/Net/Riak/Bucket.pm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm index 8f263cf..0e7aa63 100644 --- a/lib/Net/Riak/Bucket.pm +++ b/lib/Net/Riak/Bucket.pm @@ -65,6 +65,15 @@ sub get { $obj; } +sub delete_object { + my ($self, $key) = @_; + Net::Riak::Object->new( + client => $self->client, + bucket => $self, + key => $key + )->delete; +} + sub set_property { my ($self, $key, $value) = @_; $self->set_properties({$key => $value}); @@ -159,6 +168,8 @@ sub new_object { my $obj2 = $bucket->new_object('foo2', {...}); $object->store; + $bucket->delete_object($key); + =head1 DESCRIPTION The L object allows you to access and change information about a Riak bucket, and provides methods to create or retrieve objects within the bucket. @@ -209,6 +220,12 @@ Create a new L object. Additional Object constructor argument Retrieve an object from Riak. +=item delete_object + + $bucket->delete_object($key); + +Delete an object by key + =item n_val my $n_val = $bucket->n_val; -- cgit 1.4.1 From 4285b5afee9e88d39f46a77b8b1ef296b2a77ace Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Tue, 9 Nov 2010 09:49:09 +0000 Subject: added expected status message --- lib/Net/Riak/Object.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm index 25275c5..714776c 100644 --- a/lib/Net/Riak/Object.pm +++ b/lib/Net/Riak/Object.pm @@ -143,9 +143,10 @@ sub populate { $self->data($http_response->content); if (!grep { $status == $_ } @$expected) { - croak "Expected status " + confess "Expected status " . (join(', ', @$expected)) - . ", received $status"; + . ", received: \n" + . $http_response->as_string; } if ($status == 404) { -- cgit 1.4.1 From 7bc76383dec104ac3308f28228ebc3ed29f5f001 Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Tue, 9 Nov 2010 10:01:13 +0000 Subject: added useragent timeout parameter --- lib/Net/Riak.pm | 10 +++++++++- lib/Net/Riak/Client.pm | 6 ++++++ lib/Net/Riak/Role/UserAgent.pm | 4 +++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/Net/Riak.pm b/lib/Net/Riak.pm index 124279f..7412adb 100644 --- a/lib/Net/Riak.pm +++ b/lib/Net/Riak.pm @@ -33,7 +33,11 @@ sub bucket { =head1 SYNOPSIS - my $client = Net::Riak->new(host => 'http://10.0.0.40:8098'); + my $client = Net::Riak->new( + host => 'http://10.0.0.40:8098', + ua_timeout => 900 + ); + my $bucket = $client->bucket('blog'); my $obj = $bucket->new_object('new_post', {title => 'foo', content => 'bar'}); $obj->store; @@ -104,6 +108,10 @@ client_id for this client =back +=item B + +timeout for L in seconds, defaults to 3. + =head1 METHODS =head2 bucket diff --git a/lib/Net/Riak/Client.pm b/lib/Net/Riak/Client.pm index dbe3c16..4d14338 100644 --- a/lib/Net/Riak/Client.pm +++ b/lib/Net/Riak/Client.pm @@ -38,6 +38,12 @@ has http_response => ( handles => ['is_success'] ); +has ua_timeout => ( + is => 'rw', + isa => 'Int', + default => 3 +); + with 'Net::Riak::Role::UserAgent'; with qw/ Net::Riak::Role::REST diff --git a/lib/Net/Riak/Role/UserAgent.pm b/lib/Net/Riak/Role/UserAgent.pm index 123a378..122bf0c 100644 --- a/lib/Net/Riak/Role/UserAgent.pm +++ b/lib/Net/Riak/Role/UserAgent.pm @@ -18,7 +18,9 @@ has useragent => ( $opts{MaxLineLength} = 65_536; @LWP::Protocol::http::EXTRA_SOCK_OPTS = %opts; - my $ua = LWP::UserAgent->new; + my $ua = LWP::UserAgent->new( + timeout => $self->ua_timeout + ); $ua; } ); -- cgit 1.4.1 From d9a88ee0c309071cc74ca145b63ac9ccaf91d04d Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Tue, 9 Nov 2010 13:02:46 +0000 Subject: removed response string --- lib/Net/Riak/Object.pm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm index 714776c..0d2aef7 100644 --- a/lib/Net/Riak/Object.pm +++ b/lib/Net/Riak/Object.pm @@ -145,8 +145,7 @@ sub populate { if (!grep { $status == $_ } @$expected) { confess "Expected status " . (join(', ', @$expected)) - . ", received: \n" - . $http_response->as_string; + . ", received $status" } if ($status == 404) { -- cgit 1.4.1 From ad258d98195be6ce280fd0229f19873eac518f5d Mon Sep 17 00:00:00 2001 From: franck cuny Date: Thu, 25 Nov 2010 11:25:54 +0100 Subject: fix the _build_link method (reported by gpha) --- lib/Net/Riak/Object.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm index 0d2aef7..e84ad6d 100644 --- a/lib/Net/Riak/Object.pm +++ b/lib/Net/Riak/Object.pm @@ -225,8 +225,8 @@ sub _build_link { blessed $obj && $obj->isa('Net::Riak::Link') ? $obj : Net::Riak::Link->new( - bucket => $self->bucket, - key => $self->key, + bucket => $obj->bucket, + key => $obj->key, tag => $tag || $self->bucket->name, ); } -- cgit 1.4.1 From 42ebfca76e808bb9bd0ca684512fa56ac5d3148b Mon Sep 17 00:00:00 2001 From: franck cuny Date: Thu, 25 Nov 2010 11:26:42 +0100 Subject: update changes --- Changes | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Changes b/Changes index 929c9ea..bfaac55 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,10 @@ +0.12 + - fix _build_link method (reported by gphat) + - added useragent timeout parameter (Robin Edwards) + - added expected status message (Robin Edwards) + - added delete_object method to Net::Riak::Bucket (Robin Edwards) + - support for adding bucket as objects in add method (Robin Edwards) + 0.11 Wed 03 Nov 2010 03:01:10 PM CET - update POD (franck cuny) - fix wrong clearer name (_clear_siblings instead of _clear_links) -- cgit 1.4.1 From c48cbdea86f8bd2afe218584c02e527a201c29f7 Mon Sep 17 00:00:00 2001 From: Simon Wistow Date: Fri, 28 Jan 2011 11:13:18 -0800 Subject: Allow POSTing of objects to get an autogenerated key --- lib/Net/Riak/Object.pm | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/Net/Riak/Object.pm b/lib/Net/Riak/Object.pm index e84ad6d..5efe5f9 100644 --- a/lib/Net/Riak/Object.pm +++ b/lib/Net/Riak/Object.pm @@ -12,7 +12,7 @@ with 'Net::Riak::Role::Replica' => {keys => [qw/r w dw/]}; with 'Net::Riak::Role::Base' => {classes => [{name => 'bucket', required => 1}, {name => 'client', required => 1}]}; -has key => (is => 'rw', isa => 'Str', required => 1); +has key => (is => 'rw', isa => 'Str', required => 0); has status => (is => 'rw', isa => 'Int'); has exists => (is => 'rw', isa => 'Bool', default => 0,); has data => (is => 'rw', isa => 'Any', clearer => '_clear_data'); @@ -59,10 +59,14 @@ sub store { $dw ||= $self->dw; my $params = {returnbody => 'true', w => $w, dw => $dw}; + my $path = [$self->client->prefix, $self->bucket->name]; + my $method = 'POST'; + if (defined $self->key) { + push @$path, $self->key; + $method = 'PUT'; + } - my $request = - $self->client->new_request('PUT', - [$self->client->prefix, $self->bucket->name, $self->key], $params); + my $request = $self->client->new_request($method, $path, $params); $request->header('X-Riak-ClientID' => $self->client->client_id); $request->header('Content-Type' => $self->content_type); @@ -83,7 +87,7 @@ sub store { } my $response = $self->client->send_request($request); - $self->populate($response, [200, 204, 300]); + $self->populate($response, [200, 201, 204, 300]); $self; } @@ -164,8 +168,15 @@ sub populate { shift @siblings; $self->siblings(\@siblings); } - - if ($status == 200) { + + if ($status == 201) { + my $location = $http_response->header('location'); + my ($key) = ($location =~ m!/([^/]+)$!); + $self->key($key); + } + + + if ($status == 200 || $status == 201) { $self->content_type($http_response->content_type) if $http_response->content_type; $self->data(JSON::decode_json($self->data)) -- cgit 1.4.1 From 4df3b390870869295cfe1f5eb09721f01e8a1c0a Mon Sep 17 00:00:00 2001 From: Simon Wistow Date: Fri, 28 Jan 2011 11:14:58 -0800 Subject: Allow creating of new_objects without keys --- lib/Net/Riak/Bucket.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm index 0e7aa63..cc48149 100644 --- a/lib/Net/Riak/Bucket.pm +++ b/lib/Net/Riak/Bucket.pm @@ -144,13 +144,14 @@ sub set_properties { sub new_object { my ($self, $key, $data, @args) = @_; - my $object = Net::Riak::Object->new( - key => $key, + my %opts = ( data => $data, bucket => $self, client => $self->client, @args, ); + $opts{key} = $key if defined $key; + my $object = Net::Riak::Object->new(%opts); $object; } -- cgit 1.4.1 From 40906966a4262bac5feaf4f0799f1a24c1308649 Mon Sep 17 00:00:00 2001 From: Simon Wistow Date: Fri, 28 Jan 2011 11:19:47 -0800 Subject: Docs --- lib/Net/Riak/Bucket.pm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm index cc48149..2bc334e 100644 --- a/lib/Net/Riak/Bucket.pm +++ b/lib/Net/Riak/Bucket.pm @@ -215,6 +215,8 @@ DW value setting for this client (default 2) Create a new L object. Additional Object constructor arguments can be passed after $data. If $data is a reference and no explicit Object content_type is given in @args, the data will be serialised and stored as JSON. +If $key is passed as C then an autogenerated key will be provided by Riak. + =item get my $obj = $bucket->get($key, [$r]); -- cgit 1.4.1 From 7e10d2eb4ef24a5fd5f92630fd6a562ee5a0ac82 Mon Sep 17 00:00:00 2001 From: Robin Edwards Date: Fri, 28 Jan 2011 20:02:11 +0000 Subject: Added simons changes --- Changes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changes b/Changes index bfaac55..cbb632d 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,6 @@ +0.13 (UNRELEASED) + - Automatic key generation support (Simon Wistow) + 0.12 - fix _build_link method (reported by gphat) - added useragent timeout parameter (Robin Edwards) -- cgit 1.4.1