Skip to content

Commit

Permalink
Try to fix #589
Browse files Browse the repository at this point in the history
  • Loading branch information
mocchira committed Jan 25, 2017
1 parent a247a40 commit 88d41ae
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
12 changes: 9 additions & 3 deletions apps/leo_storage/src/leo_storage_handler_object.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1015,8 +1015,10 @@ read_and_repair_2(#read_parameter{addr_id = AddrId,
start_pos = StartPos,
end_pos = EndPos} = ReadParameter,
#redundant_node{node = Node}, Redundancies) when Node == erlang:node() ->
LeftRedundancies = [RedundantNode ||
#redundant_node{node = RNode} = RedundantNode <- Redundancies, RNode =/= Node],
read_and_repair_3(
get_fun(AddrId, Key, StartPos, EndPos), ReadParameter, Redundancies);
get_fun(AddrId, Key, StartPos, EndPos), ReadParameter, LeftRedundancies);

read_and_repair_2(#read_parameter{addr_id = AddrId,
key = Key,
Expand Down Expand Up @@ -1048,8 +1050,10 @@ read_and_repair_2(#read_parameter{addr_id = AddrId,
{ok, match} = Reply ->
Reply;
_ ->
LeftRedundancies = [RedundantNode ||
#redundant_node{node = RNode} = RedundantNode <- Redundancies, RNode =/= Node],
read_and_repair_3(
get_fun(AddrId, Key, StartPos, EndPos), ReadParameter, Redundancies)
get_fun(AddrId, Key, StartPos, EndPos), ReadParameter, LeftRedundancies)
end;

read_and_repair_2(ReadParameter, #redundant_node{node = Node}, Redundancies) ->
Expand All @@ -1071,7 +1075,9 @@ read_and_repair_2(ReadParameter, #redundant_node{node = Node}, Redundancies) ->
timeout = Cause ->
{error, Cause}
end,
read_and_repair_3(RetRPC, ReadParameter, Redundancies).
LeftRedundancies = [RedundantNode ||
#redundant_node{node = RNode} = RedundantNode <- Redundancies, RNode =/= Node],
read_and_repair_3(RetRPC, ReadParameter, LeftRedundancies).

%% @private
read_and_repair_3({ok, Metadata, #?OBJECT{data = Bin}}, #read_parameter{}, []) ->
Expand Down
8 changes: 3 additions & 5 deletions apps/leo_storage/src/leo_storage_read_repairer.erl
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,15 @@ repair(#read_parameter{quorum = ReadQuorum,
void;
(#redundant_node{node = Node,
available = true,
can_read_repair = true}) when Node /= erlang:node() ->
can_read_repair = true}) ->
spawn(fun() ->
RPCKey = rpc:async_call(
Node, leo_storage_handler_object,
head, [AddrId, Key, false]),
compare(Ref, From, RPCKey, Node, Params)
end);
(_) ->
erlang:send(From, {Ref, ok})
end)
end, Redundancies),
loop(ReadQuorum, Ref, From, NumOfNodes, {ReqId, Key, []}, Callback)
loop(ReadQuorum - 1, Ref, From, NumOfNodes, {ReqId, Key, []}, Callback)
end.


Expand Down

0 comments on commit 88d41ae

Please sign in to comment.