@@ -113,25 +113,30 @@ eval_quorum_members(_ExpectedNodes, _Running, [], _TargetSize, Result) ->
113
113
eval_quorum_members (ExpectedNodes , Running , [Q | LocalLeaders ], TargetSize , OldResult ) ->
114
114
{ok , Members , {_ , LeaderNode }} = ra :members (amqqueue :get_pid (Q )),
115
115
116
- % % Check if Leader is indeed this node
117
- Result = case LeaderNode =:= node () of
118
- true ->
119
- MemberNodes = [Node || {_ , Node } <- Members ],
120
- Remove = MemberNodes -- ExpectedNodes ,
121
- case Remove of
122
- [] ->
123
- add_member (Q , Running , MemberNodes , get_target_size (Q , TargetSize ));
124
- _ ->
125
- remove_members (Q , Remove )
126
- end ;
127
- false ->
128
- noop
129
- end ,
116
+ Result =
117
+ maybe
118
+ % % Check if Leader is indeed this node
119
+ LeaderNode ?= node (),
120
+ % % And that this not is not in maintenance mode
121
+ true ?= not rabbit_maintenance :is_being_drained_local_read (node ()),
122
+ MemberNodes = [Node || {_ , Node } <- Members ],
123
+ Remove = MemberNodes -- ExpectedNodes ,
124
+ case Remove of
125
+ [] ->
126
+ add_member (Q , Running , MemberNodes , get_target_size (Q , TargetSize ));
127
+ _ ->
128
+ remove_members (Q , Remove )
129
+ end
130
+ else
131
+ _ ->
132
+ noop
133
+ end ,
130
134
eval_quorum_members (ExpectedNodes , Running , LocalLeaders , TargetSize ,
131
135
update_result (OldResult , Result )).
132
136
133
137
add_member (Q , Running , MemberNodes , TargetSize ) ->
134
- New = Running -- MemberNodes ,
138
+ % % Filter out any new nodes under maintenance
139
+ New = rabbit_maintenance :filter_out_drained_nodes_local_read (Running -- MemberNodes ),
135
140
case should_add_node (MemberNodes , New , Q , TargetSize ) of
136
141
true ->
137
142
% % In the future, sort the list of new nodes based on load,
0 commit comments