diff options
author | Robin Edwards <robin.ge@gmail.com> | 2011-04-20 14:38:43 +0100 |
---|---|---|
committer | Robin Edwards <robin.ge@gmail.com> | 2011-04-20 14:38:43 +0100 |
commit | 79bea382fd2c0753ca9ace79a11bb74c9a1d722b (patch) | |
tree | bde42a47792a27e0a863ee527b88c8c24258f7e9 /lib/Net/Riak/Role/PBC/MapReduce.pm | |
parent | Merge remote branch 'simon/fix_link_encoding' (diff) | |
download | net-riak-79bea382fd2c0753ca9ace79a11bb74c9a1d722b.tar.gz |
merged pbc branch to master
Diffstat (limited to 'lib/Net/Riak/Role/PBC/MapReduce.pm')
-rw-r--r-- | lib/Net/Riak/Role/PBC/MapReduce.pm | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/Net/Riak/Role/PBC/MapReduce.pm b/lib/Net/Riak/Role/PBC/MapReduce.pm new file mode 100644 index 0000000..afeabe8 --- /dev/null +++ b/lib/Net/Riak/Role/PBC/MapReduce.pm @@ -0,0 +1,37 @@ +package Net::Riak::Role::PBC::MapReduce; +use Moose::Role; +use JSON; +use List::Util 'sum'; +use Data::Dump 'pp'; + +sub execute_job { + my ($self, $job, $timeout, $returned_phases) = @_; + + $job->{timeout} = $timeout; + + my $job_request = JSON::encode_json($job); + + my $results; + + my $resp = $self->send_message( MapRedReq => { + request => $job_request, + content_type => 'application/json' + }, sub { push @$results, $self->decode_phase(shift) }) + or + die "MapReduce query failed!"; + + + return $returned_phases == 1 ? $results->[0] : $results; +} + +sub decode_phase { + my ($self, $resp) = @_; + + if (defined $resp->response && length($resp->response)) { + return JSON::decode_json($resp->response); + } + + return; +} + +1; |