basho / riak (http://riak.basho.com/)

Riak is a decentralized datastore from Basho Technologies.

Clone this repository (size: 12.4 MB): HTTPS / SSH
$ hg clone http://hg.basho.com/riak
commit 702: e1357f00129f
parent 701: d9c0fe9d2760
branch: default
tags: riak-0.7.1
fix get_merkle in vnode
And...@basho.com>
6 months ago

Changed (Δ570 bytes):

raw changeset »

apps/riak/src/riak_vnode.erl (14 lines added, 0 lines removed)

Up to file-list apps/riak/src/riak_vnode.erl:

@@ -312,6 +312,17 @@ syntactic_put_merge(Mod, ModState, BKey,
312
312
    end.
313
313
314
314
%% @private
315
get_merkle(_State=#state{mod=Mod,modstate=ModState}) ->
316
    KeyList = Mod:list(ModState),
317
    Merk0 = merkerl:build_tree([]),
318
    get_merk(Mod,ModState,KeyList,Merk0).
319
%% @private
320
get_merk(_Mod,_ModState,[],Merk) -> Merk;
321
get_merk(Mod,ModState,[BKey|KeyList],Merk) ->
322
    V = Mod:get(ModState,BKey), % normally, V = {ok,BinObj}
323
    get_merk(Mod,ModState,KeyList,merkerl:insert({BKey,erlang:phash2(V)},Merk)).
324
325
%% @private
315
326
get_vclocks(KeyList,_State=#state{mod=Mod,modstate=ModState}) ->
316
327
    [{BKey, get_vclock(BKey,Mod,ModState)} || BKey <- KeyList].
317
328
%% @private
@@ -329,6 +340,9 @@ do_fold(Fun, Acc0, _State=#state{mod=Mod
329
340
code_change(_OldVsn, StateName, State, _Extra) -> {ok, StateName, State}.
330
341
331
342
%% @private
343
handle_event({get_merkle, From}, StateName, State) ->
344
    gen_server2:reply(From, get_merkle(State)),
345
    {next_state, StateName, State, ?TIMEOUT};
332
346
handle_event({get_vclocks, From, KeyList}, StateName, State) ->
333
347
    gen_server2:reply(From, get_vclocks(KeyList, State)),
334
348
    {next_state, StateName, State, ?TIMEOUT};