summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Net/Riak/Bucket.pm19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Net/Riak/Bucket.pm b/lib/Net/Riak/Bucket.pm
index cd42316..9720e86 100644
--- a/lib/Net/Riak/Bucket.pm
+++ b/lib/Net/Riak/Bucket.pm
@@ -45,8 +45,10 @@ sub allow_multiples {
}
sub get_keys {
- my $self = shift;
- my $properties = $self->get_properties({keys => 'true', props => 'false'});
+ my ($self, $params) = @_;
+ $params ||= {};
+ my $key_mode = $params->{stream} ? 'stream' : 'true';
+ my $properties = $self->get_properties({keys => $key_mode, props => 'false'});
return $properties->{keys};
}
@@ -89,7 +91,18 @@ sub get_properties {
die "Error getting bucket properties: " . $response->status_line . "\n";
}
- return JSON::decode_json($response->content);
+ if ($params->{keys} ne 'stream') {
+ return JSON::decode_json($response->content);
+ }
+
+ # In streaming mode, aggregate keys from the multiple returned chunk objects
+ else {
+ my $json = JSON->new;
+ my $props = $json->incr_parse($response->content);
+ my @keys = map { $_->{keys} && ref $_->{keys} eq 'ARRAY' ? @{$_->{keys}} : () }
+ $json->incr_parse;
+ return { props => $props, keys => \@keys };
+ }
}
sub set_properties {