Writing a reduce phase with reduce_phase_only_1 and additional parameters

Manuel Gomez manuel at inaka.net
Wed May 23 15:03:14 EDT 2012

I need to write a a reduce_slice function in erlang that I'll load into
riak, I'm doing this so I don't need to use the javascript one which has
already once maxed out the js_thread_stack memory.

This is my function so far:

reduce_slice(WList,{Page,PageSize}) ->
  lager:info("Page and PageSize ~p - ~p",[Page,PageSize]),
  lists:sublist(WList, Page, PageSize).

This "works". The problem is that because the reduce phase gets executed
with whatever it has at any given moment, the end result is always
different. So I need to call this phase with reduce_phase_only_1 as a
param, and here is where I'm a bit lost, this is how I call the function


I see that in the Riak's MapReduce documentation you can call a function
with "reduce_phase_only_1" like so:

{reduce, FunSpec, [reduce_phase_only_1], Keep}

So I tried:


Which throws (of course because of the the function definition is not
expecting a list):

Supervisor riak_pipe_vnode_worker_sup had child undefined started with
{riak_pipe_vnode_worker,start_link,undefined} at <0.2927.0> exit with
reason no function clause matching whisper_db:reduce_slice([

I also tried:

and changing the function definition to:

reduce_slice(WList,{Phase,{Page,PageSize}}) ->
  lager:info("Page and PageSize ~p - ~p",[Page,PageSize]),
  lists:sublist(WList, Page, PageSize).

I get the same problem as my first example (different results every time).

So I'm not sure the reduce function definition is wrong, or I'm invoking it

Thanks in advance for any help.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20120523/94b8f0e9/attachment.html>

More information about the riak-users mailing list