@@ -74,24 +74,32 @@ go(DbName, AllDocs0, Opts) ->
7474 rexi_monitor :stop (RexiMon )
7575 end .
7676
77- handle_message ({rexi_DOWN , _ , {_ , NodeRef }, _ }, _Worker , # acc {} = Acc0 ) ->
77+ handle_message ({rexi_DOWN , _ , {_ , NodeRef }, _ }, Worker , # acc {} = Acc0 ) ->
7878 # acc {grouped_docs = GroupedDocs } = Acc0 ,
7979 NewGrpDocs = [X || {# shard {node = N }, _ } = X <- GroupedDocs , N =/= NodeRef ],
80- skip_message (Acc0 # acc {waiting_count = length (NewGrpDocs ), grouped_docs = NewGrpDocs });
80+ Acc1 = Acc0 # acc {waiting_count = length (NewGrpDocs ), grouped_docs = NewGrpDocs },
81+ Acc2 = start_followers (Worker , Acc1 ),
82+ skip_message (Acc2 );
8183handle_message ({rexi_EXIT , _ }, Worker , # acc {} = Acc0 ) ->
8284 # acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
8385 NewGrpDocs = lists :keydelete (Worker , 1 , GrpDocs ),
84- skip_message (Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs });
86+ Acc1 = Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs },
87+ Acc2 = start_followers (Worker , Acc1 ),
88+ skip_message (Acc2 );
8589handle_message ({error , all_dbs_active }, Worker , # acc {} = Acc0 ) ->
8690 % treat it like rexi_EXIT, the hope at least one copy will return successfully
8791 # acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
8892 NewGrpDocs = lists :keydelete (Worker , 1 , GrpDocs ),
89- skip_message (Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs });
93+ Acc1 = Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs },
94+ Acc2 = start_followers (Worker , Acc1 ),
95+ skip_message (Acc2 );
9096handle_message (internal_server_error , Worker , # acc {} = Acc0 ) ->
9197 % happens when we fail to load validation functions in an RPC worker
9298 # acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
9399 NewGrpDocs = lists :keydelete (Worker , 1 , GrpDocs ),
94- skip_message (Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs });
100+ Acc1 = Acc0 # acc {waiting_count = WC - 1 , grouped_docs = NewGrpDocs },
101+ Acc2 = start_followers (Worker , Acc1 ),
102+ skip_message (Acc2 );
95103handle_message (attachment_chunk_received , _Worker , # acc {} = Acc0 ) ->
96104 {ok , Acc0 };
97105handle_message ({ok , Replies }, Worker , # acc {} = Acc0 ) ->
0 commit comments