Skip to content

Commit

Permalink
fix the block_at method luwak_tree
Browse files Browse the repository at this point in the history
  • Loading branch information
Cliff Moon committed May 27, 2010
1 parent 1ae5a1e commit 9fd968d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 11 deletions.
16 changes: 9 additions & 7 deletions apps/luwak/src/luwak_tree.erl
Original file line number Diff line number Diff line change
Expand Up @@ -191,21 +191,23 @@ block_at_retr(Riak, NodeName, NodeOffset, Pos) ->

block_at_node(Riak, NodeObj, node, Links, NodeOffset, Pos) ->
case which_child(Links, NodeOffset, Pos, []) of
{_, {ChildName,_}, _} -> block_at_retr(Riak, ChildName, NodeOffset, Pos);
{Head, {ChildName,_}, _} -> block_at_retr(Riak, ChildName, NodeOffset+luwak_tree_utils:blocklist_length(Head), Pos);
{_, undefined, _} -> {ok, undefined}
end;
block_at_node(Riak, NodeObj, block, _, NodeOffset, _) ->
{ok, NodeObj}.

which_child([E={ChildName,Length}], NodeOffset, Pos, Acc) when Pos > Length+NodeOffset ->
% error_logger:info_msg("A which_child(~p, ~p, ~p)~n", [E, NodeOffset, Pos]),
{lists:reverse([E|Acc]), undefined, []};
which_child([{ChildName,Length}], _, _, Acc) ->
{lists:reverse(Acc), {ChildName,Length}, []};
which_child([E={ChildName,Length}|Tail], NodeOffset, Pos, Acc) when Pos > NodeOffset + Length ->
% error_logger:info_msg("which_child(~p, ~p, ~p)~n", [[{ChildName,Length}|Tail], NodeOffset, Pos]),
which_child([E={ChildName,Length}], NodeOffset, Pos, Acc) ->
% error_logger:info_msg("B which_child(~p, ~p, ~p)~n", [E, NodeOffset, Pos]),
{lists:reverse(Acc), E, []};
which_child([E={ChildName,Length}|Tail], NodeOffset, Pos, Acc) when Pos >= NodeOffset + Length ->
% error_logger:info_msg("C which_child(~p, ~p, ~p)~n", [[{ChildName,Length}|Tail], NodeOffset, Pos]),
which_child(Tail, NodeOffset+Length, Pos, [E|Acc]);
which_child([E={ChildName,Length}|Tail], NodeOffset, Pos, Acc) when Pos =< NodeOffset + Length ->
% error_logger:info_msg("which_child(~p, ~p, ~p)~n", [[{ChildName,Length}|Tail], NodeOffset, Pos]),
which_child([E={ChildName,Length}|Tail], NodeOffset, Pos, Acc) when Pos < NodeOffset + Length ->
% error_logger:info_msg("D which_child(~p, ~p, ~p)~n", [[{ChildName,Length}|Tail], NodeOffset, Pos]),
{lists:reverse(Acc), {ChildName,Length}, Tail}.

map_sublist(Fun, N, List) ->
Expand Down
18 changes: 14 additions & 4 deletions apps/luwak/test/luwak_tree_tests.erl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ create_simple_tree_test() ->
Children = RootNode#n.children,
?assertEqual([{BHash1,5},{BHash2,5},{BHash3,3}], Children)
end).

create_and_overwrite_middle_tree_test() ->
test_helper:riak_test(fun(Riak) ->
{ok, File} = luwak_file:create(Riak, <<"file1">>, [{tree_order,4},{block_size,5}], dict:new()),
Expand Down Expand Up @@ -58,7 +58,7 @@ create_multilevel_tree_test() ->
?assertEqual(SecondNodeChildren, Node2Node#n.children),
?assertEqual(ThirdNodeChildren, Node3Node#n.children)
end).

create_and_overwrite_multilevel_tree_test() ->
test_helper:riak_test(fun(Riak) ->
{ok, File} = luwak_file:create(Riak, <<"file1">>, [{tree_order,5},{block_size,1}], dict:new()),
Expand All @@ -84,12 +84,22 @@ create_and_overwrite_multilevel_tree_test() ->
?assertEqual(SecondNodeChildren, Node2Node#n.children),
?assertEqual(ThirdNodeChildren, Node3Node#n.children)
end).

create_and_append_test() ->
test_helper:riak_test(fun(Riak) ->
{ok, File} = luwak_file:create(Riak, <<"file1">>, [{tree_order,3},{block_size,2}], dict:new()),
{ok, Written1, File2} = luwak_io:put_range(Riak, File, 0, <<"wontyouplease">>),
{ok, Written2, File3} = luwak_io:put_range(Riak, File2, 13, <<"touchmymonkey">>),
Blocks = [ {skerl:hexhash(512, X), 2} || <<X:2/binary>> <= <<"wontyoupleasetouchmymonkey">> ],
ok = file:write_file("/Users/cliff/tree3.dot", luwak_tree:visualize_tree(Riak, luwak_file:get_property(File3, root)))
end).
end).

block_at_test() ->
test_helper:riak_test(fun(Riak) ->
{ok, File} = luwak_file:create(Riak, <<"file1">>, [{tree_order,3},{block_size,3}], dict:new()),
{ok, Written1, File1} = luwak_io:put_range(Riak, File, 0, <<"heywhyareyoudrp">>),
{ok, Block} = luwak_tree:block_at(Riak, File1, 9),
Data = luwak_block:data(Block),
timer:sleep(1000),
?assertEqual(<<"you">>, Data)
end).

0 comments on commit 9fd968d

Please sign in to comment.