@@ -51,6 +51,9 @@ groups() ->
51
51
{cluster_size_3 , [], [
52
52
declare_args ,
53
53
declare_policy ,
54
+ declare_policy_nodes ,
55
+ declare_policy_all ,
56
+ declare_policy_exactly ,
54
57
declare_config ,
55
58
calculate_min_master ,
56
59
calculate_random ,
@@ -125,6 +128,56 @@ declare_policy(Config) ->
125
128
declare (Config , QueueName , false , false , _Args = [], none ),
126
129
verify_min_master (Config , Q ).
127
130
131
+ declare_policy_nodes (Config ) ->
132
+ setup_test_environment (Config ),
133
+ unset_location_config (Config ),
134
+ % Note:
135
+ % Node0 has 15 queues, Node1 has 8 and Node2 has 1
136
+ Node0Name = rabbit_data_coercion :to_binary (
137
+ rabbit_ct_broker_helpers :get_node_config (Config , 0 , nodename )),
138
+ Node1 = rabbit_ct_broker_helpers :get_node_config (Config , 1 , nodename ),
139
+ Node1Name = rabbit_data_coercion :to_binary (Node1 ),
140
+ Nodes = [Node1Name , Node0Name ],
141
+ Policy = [{<<" queue-master-locator" >>, <<" min-masters" >>},
142
+ {<<" ha-mode" >>, <<" nodes" >>},
143
+ {<<" ha-params" >>, Nodes }],
144
+ ok = rabbit_ct_broker_helpers :set_policy (Config , 0 , ? POLICY ,
145
+ <<" .*" >>, <<" queues" >>, Policy ),
146
+ QueueName = rabbit_misc :r (<<" /" >>, queue , Q = <<" qm.test" >>),
147
+ declare (Config , QueueName , false , false , _Args = [], none ),
148
+ verify_min_master (Config , Q , Node1 ).
149
+
150
+ declare_policy_all (Config ) ->
151
+ setup_test_environment (Config ),
152
+ unset_location_config (Config ),
153
+ % Note:
154
+ % Node0 has 15 queues, Node1 has 8 and Node2 has 1
155
+ Policy = [{<<" queue-master-locator" >>, <<" min-masters" >>},
156
+ {<<" ha-mode" >>, <<" all" >>}],
157
+ ok = rabbit_ct_broker_helpers :set_policy (Config , 0 , ? POLICY ,
158
+ <<" .*" >>, <<" queues" >>, Policy ),
159
+ QueueName = rabbit_misc :r (<<" /" >>, queue , Q = <<" qm.test" >>),
160
+ declare (Config , QueueName , false , false , _Args = [], none ),
161
+ verify_min_master (Config , Q ).
162
+
163
+ declare_policy_exactly (Config ) ->
164
+ setup_test_environment (Config ),
165
+ unset_location_config (Config ),
166
+ % Note:
167
+ % Node0 has 15 queues, Node1 has 8 and Node2 has 1
168
+ Node1 = rabbit_ct_broker_helpers :get_node_config (Config , 1 , nodename ),
169
+ Policy = [{<<" queue-master-locator" >>, <<" min-masters" >>},
170
+ {<<" ha-mode" >>, <<" exactly" >>},
171
+ {<<" ha-params" >>, 2 }],
172
+ ok = rabbit_ct_broker_helpers :set_policy (Config , 0 , ? POLICY ,
173
+ <<" .*" >>, <<" queues" >>, Policy ),
174
+ QueueName = rabbit_misc :r (<<" /" >>, queue , Q = <<" qm.test" >>),
175
+ declare (Config , QueueName , false , false , _Args = [], none ),
176
+ % Note: even though Node2 has the fewest masters, the "exactly" policy
177
+ % chooses Node0 and Node1 as eligible, and then "min-masters"
178
+ % chooses Node1
179
+ verify_min_master (Config , Q , Node1 ).
180
+
128
181
declare_config (Config ) ->
129
182
setup_test_environment (Config ),
130
183
set_location_config (Config , <<" min-masters" >>),
@@ -249,11 +302,15 @@ declare(Config, QueueName, Durable, AutoDelete, Args, Owner) ->
249
302
[QueueName , Durable , AutoDelete , Args , Owner ]),
250
303
Queue .
251
304
252
- verify_min_master (Config , Q ) ->
305
+ verify_min_master (Config , Q , MinMasterNode ) ->
253
306
Node = rabbit_ct_broker_helpers :get_node_config (Config , 0 , nodename ),
307
+ Rpc = rpc :call (Node , rabbit_queue_master_location_misc ,
308
+ lookup_master , [Q , ? DEFAULT_VHOST_PATH ]),
309
+ ? assertEqual ({ok , MinMasterNode }, Rpc ).
310
+
311
+ verify_min_master (Config , Q ) ->
254
312
MinMaster = min_master_node (Config ),
255
- ? assertEqual ({ok , MinMaster }, rpc :call (Node , rabbit_queue_master_location_misc ,
256
- lookup_master , [Q , ? DEFAULT_VHOST_PATH ])).
313
+ verify_min_master (Config , Q , MinMaster ).
257
314
258
315
verify_random (Config , Q ) ->
259
316
[Node | _ ] = Nodes = rabbit_ct_broker_helpers :get_node_configs (Config ,
0 commit comments