Skip to content

Commit

Permalink
fixes clobbering when turning a leaf into an inner
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewoswald authored and Andrew Oswald committed Feb 21, 2011
1 parent 665aed9 commit fb89eb3
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions src/merkerl.erl
Expand Up @@ -156,12 +156,10 @@ mi_insert({Offset,MI},Tree) ->
Key -> % replacing! Key -> % replacing!
mkleaf(MI); mkleaf(MI);
_ -> % turning a leaf into an inner _ -> % turning a leaf into an inner
K0 = orddict:new(), Kid = orddict:store(offset_key(Offset,Tree#merk.key),
K1 = orddict:store(offset_key(Offset,Key), Tree,orddict:new()),
mkleaf(MI),K0), NewInner = mkinner(Offset,Kid),
TKey = Tree#merk.key, mi_insert1({Offset,MI},NewInner)
Kids = orddict:store(offset_key(Offset,TKey),Tree,K1),
mkinner(Offset,Kids)
end; end;
inner -> inner ->
mi_insert1({Offset,MI},Tree) mi_insert1({Offset,MI},Tree)
Expand Down Expand Up @@ -362,6 +360,9 @@ merkle_test() ->
?assertEqual([one], diff(C2,undefined)), ?assertEqual([one], diff(C2,undefined)),
STree1 = build_tree([{"hello", "hi"},{"and", "what"}]), STree1 = build_tree([{"hello", "hi"},{"and", "what"}]),
STree2 = build_tree([{"hello", "hi"},{"goodbye", "bye"}]), STree2 = build_tree([{"hello", "hi"},{"goodbye", "bye"}]),
?assertEqual(lists:usort(["and", "goodbye"]), diff(STree1, STree2)). ?assertEqual(lists:usort(["and", "goodbye"]), diff(STree1, STree2)),
I = [{<<"riak.com42">>,sha("should not")},{<<"riak.com452">>,sha("clobber")}],
I2 = build_tree(I),
?assertEqual(2, length(allkeys(I2))).




0 comments on commit fb89eb3

Please sign in to comment.