From 2747ead322444efc49ec88264a75a16f960cd50a Mon Sep 17 00:00:00 2001 From: Adam Kocoloski Date: Tue, 19 Apr 2011 21:39:22 -0400 Subject: [PATCH] Tolerate node failures in reduce views w/ zero rows Merge branch 12052-zero-row-reduce-hang by squashed commit of: commit 4dc09070fbc90186987327e07d7515e35886c18f commit 7b62ea72a5614d2123aa7798bba3dd10f6141230 Thanks Bob Dionne for the test case. BugzID: 12052 --- src/fabric_view_reduce.erl | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/fabric_view_reduce.erl b/src/fabric_view_reduce.erl index 73f550a..67b738f 100644 --- a/src/fabric_view_reduce.erl +++ b/src/fabric_view_reduce.erl @@ -97,5 +97,18 @@ handle_message(#view_row{key=Key} = Row, {Worker, From}, State) -> end; handle_message(complete, Worker, State) -> - Counters = fabric_dict:update_counter(Worker, 1, State#collector.counters), - fabric_view:maybe_send_row(State#collector{counters = Counters}). + C1 = fabric_dict:update_counter(Worker, 1, State#collector.counters), + C2 = fabric_view:remove_overlapping_shards(Worker, C1), + fabric_view:maybe_send_row(State#collector{counters = C2}). + +complete_worker_test() -> + Shards = + mem3_util:create_partition_map("foo",3,3,[node(),node(),node()]), + Workers = lists:map(fun(#shard{} = Shard) -> + Ref = make_ref(), + Shard#shard{ref = Ref} + end, + Shards), + State = #collector{counters=fabric_dict:init(Workers,0)}, + {ok, NewState} = handle_message(complete, lists:nth(2,Workers), State), + ?assertEqual(orddict:size(NewState#collector.counters),length(Workers) - 2).