@@ -23,7 +23,7 @@ groups() ->
23
23
[
24
24
{unclustered , [],
25
25
[
26
- {quorum_queue_3 , [], [auto_grow , auto_shrink ]}
26
+ {quorum_queue_3 , [], [auto_grow , auto_grow_drained_node , auto_shrink ]}
27
27
]}
28
28
].
29
29
@@ -130,6 +130,43 @@ auto_grow(Config) ->
130
130
3 =:= length (M )
131
131
end ).
132
132
133
+ auto_grow_drained_node (Config ) ->
134
+ [Server0 , Server1 , Server2 ] =
135
+ rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
136
+ Ch = rabbit_ct_client_helpers :open_channel (Config , Server0 ),
137
+
138
+ QQ = ? config (queue_name , Config ),
139
+ ? assertEqual ({'queue.declare_ok' , QQ , 0 , 0 },
140
+ declare (Ch , QQ , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}])),
141
+
142
+ % % There is only one node in the cluster at the moment
143
+ {ok , Members , _ } = ra :members ({quorum_queue_utils :ra_name (QQ ), Server0 }),
144
+ ? assertEqual (1 , length (Members )),
145
+
146
+ add_server_to_cluster (Server1 , Server0 ),
147
+ % % mark server1 as drained, which should mean the node is not a candiate
148
+ % % for qq membership
149
+ rabbit_ct_broker_helpers :mark_as_being_drained (Config , Server1 ),
150
+ rabbit_ct_helpers :await_condition (
151
+ fun () -> rabbit_ct_broker_helpers :is_being_drained_local_read (Config , Server1 ) end ,
152
+ 10000 ),
153
+ add_server_to_cluster (Server2 , Server0 ),
154
+ timer :sleep (5000 ),
155
+ % % We have 3 nodes, but one is drained, so it will not be concidered.
156
+ {ok , Members1 , _ } = ra :members ({quorum_queue_utils :ra_name (QQ ), Server0 }),
157
+ ? assertEqual (1 , length (Members1 )),
158
+
159
+ rabbit_ct_broker_helpers :unmark_as_being_drained (Config , Server1 ),
160
+ rabbit_ct_helpers :await_condition (
161
+ fun () -> not rabbit_ct_broker_helpers :is_being_drained_local_read (Config , Server1 ) end ,
162
+ 10000 ),
163
+ % % We have 3 nodes, none is being drained, so we should grow membership to 3
164
+ wait_until (fun () ->
165
+ {ok , M , _ } = ra :members ({quorum_queue_utils :ra_name (QQ ), Server0 }),
166
+ 3 =:= length (M )
167
+ end ).
168
+
169
+
133
170
auto_shrink (Config ) ->
134
171
[Server0 , Server1 , Server2 ] =
135
172
rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
0 commit comments