@@ -74,24 +74,32 @@ go(DbName, AllDocs0, Opts) ->
74
74
rexi_monitor :stop (RexiMon )
75
75
end .
76
76
77
- handle_message ({rexi_DOWN , _ , {_ , NodeRef }, _ }, _Worker , # acc {} = Acc0 ) ->
77
+ handle_message ({rexi_DOWN , _ , {_ , NodeRef }, _ }, Worker , # acc {} = Acc0 ) ->
78
78
# acc {grouped_docs = GroupedDocs } = Acc0 ,
79
79
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 );
81
83
handle_message ({rexi_EXIT , _ }, Worker , # acc {} = Acc0 ) ->
82
84
# acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
83
85
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 );
85
89
handle_message ({error , all_dbs_active }, Worker , # acc {} = Acc0 ) ->
86
90
% treat it like rexi_EXIT, the hope at least one copy will return successfully
87
91
# acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
88
92
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 );
90
96
handle_message (internal_server_error , Worker , # acc {} = Acc0 ) ->
91
97
% happens when we fail to load validation functions in an RPC worker
92
98
# acc {waiting_count = WC , grouped_docs = GrpDocs } = Acc0 ,
93
99
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 );
95
103
handle_message (attachment_chunk_received , _Worker , # acc {} = Acc0 ) ->
96
104
{ok , Acc0 };
97
105
handle_message ({ok , Replies }, Worker , # acc {} = Acc0 ) ->
0 commit comments