summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/queue_master_location_SUITE.erl79
1 files changed, 55 insertions, 24 deletions
diff --git a/test/queue_master_location_SUITE.erl b/test/queue_master_location_SUITE.erl
index db7cdbb414..701cd18514 100644
--- a/test/queue_master_location_SUITE.erl
+++ b/test/queue_master_location_SUITE.erl
@@ -165,18 +165,27 @@ declare_policy_exactly(Config) ->
unset_location_config(Config),
% Note:
% Node0 has 15 queues, Node1 has 8 and Node2 has 1
- Node1 = rabbit_ct_broker_helpers:get_node_config(Config, 1, nodename),
Policy = [{<<"queue-master-locator">>, <<"min-masters">>},
{<<"ha-mode">>, <<"exactly">>},
{<<"ha-params">>, 2}],
ok = rabbit_ct_broker_helpers:set_policy(Config, 0, ?POLICY,
<<".*">>, <<"queues">>, Policy),
- QueueName = rabbit_misc:r(<<"/">>, queue, Q = <<"qm.test">>),
- declare(Config, QueueName, false, false, _Args=[], none),
- % Note: even though Node2 has the fewest masters, the "exactly" policy
- % chooses Node0 and Node1 as eligible, and then "min-masters"
- % chooses Node1
- verify_min_master(Config, Q, Node1).
+ QueueRec = rabbit_misc:r(<<"/">>, queue, Q = <<"qm.test">>),
+ declare(Config, QueueRec, false, false, _Args=[], none),
+
+ Node0 = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+ rabbit_ct_broker_helpers:control_action(sync_queue, Node0,
+ [binary_to_list(Q)], [{"-p", "/"}]),
+ wait_for_sync(Config, Node0, QueueRec, 1),
+
+ {ok, Queue} = rabbit_ct_broker_helpers:rpc(Config, Node0,
+ rabbit_amqqueue, lookup, [QueueRec]),
+ ct:pal("Queue after sync ~p~n", [Queue]),
+ {MNode, SNodes, SSNodes} = rabbit_ct_broker_helpers:rpc(Config, Node0,
+ rabbit_mirror_queue_misc,
+ actual_queue_nodes, [Queue]),
+ ct:pal("MNode ~p SNodes ~p SSNodes ~p~n", [MNode, SNodes, SSNodes]),
+ verify_min_master(Config, Q, Node0).
declare_config(Config) ->
setup_test_environment(Config),
@@ -286,26 +295,27 @@ min_master_node(Config) ->
set_location_config(Config, Strategy) ->
Nodes = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
- [ok = rpc:call(Node, application, set_env,
- [rabbit, queue_master_locator, Strategy]) || Node <- Nodes],
+ [ok = rabbit_ct_broker_helpers:rpc(Config, Node,
+ application, set_env,
+ [rabbit, queue_master_locator, Strategy]) || Node <- Nodes],
ok.
unset_location_config(Config) ->
Nodes = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
- [ok = rpc:call(Node, application, unset_env,
- [rabbit, queue_master_locator]) || Node <- Nodes],
+ [ok = rabbit_ct_broker_helpers:rpc(Config, Node,
+ application, unset_env,
+ [rabbit, queue_master_locator]) || Node <- Nodes],
ok.
-declare(Config, QueueName, Durable, AutoDelete, Args, Owner) ->
- Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
- {new, Queue} = rpc:call(Node, rabbit_amqqueue, declare,
- [QueueName, Durable, AutoDelete, Args, Owner]),
+declare(Config, QueueName, Durable, AutoDelete, Args0, Owner) ->
+ Args1 = [QueueName, Durable, AutoDelete, Args0, Owner],
+ {new, Queue} = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, declare, Args1),
Queue.
verify_min_master(Config, Q, MinMasterNode) ->
- Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
- Rpc = rpc:call(Node, rabbit_queue_master_location_misc,
- lookup_master, [Q, ?DEFAULT_VHOST_PATH]),
+ Rpc = rabbit_ct_broker_helpers:rpc(Config, 0,
+ rabbit_queue_master_location_misc,
+ lookup_master, [Q, ?DEFAULT_VHOST_PATH]),
?assertEqual({ok, MinMasterNode}, Rpc).
verify_min_master(Config, Q) ->
@@ -313,17 +323,38 @@ verify_min_master(Config, Q) ->
verify_min_master(Config, Q, MinMaster).
verify_random(Config, Q) ->
- [Node | _] = Nodes = rabbit_ct_broker_helpers:get_node_configs(Config,
- nodename),
- {ok, Master} = rpc:call(Node, rabbit_queue_master_location_misc,
- lookup_master, [Q, ?DEFAULT_VHOST_PATH]),
+ [Node | _] = Nodes = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
+ {ok, Master} = rabbit_ct_broker_helpers:rpc(Config, Node,
+ rabbit_queue_master_location_misc,
+ lookup_master, [Q, ?DEFAULT_VHOST_PATH]),
?assert(lists:member(Master, Nodes)).
verify_client_local(Config, Q) ->
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
- ?assertEqual({ok, Node}, rpc:call(Node, rabbit_queue_master_location_misc,
- lookup_master, [Q, ?DEFAULT_VHOST_PATH])).
+ Rpc = rabbit_ct_broker_helpers:rpc(Config, Node,
+ rabbit_queue_master_location_misc,
+ lookup_master, [Q, ?DEFAULT_VHOST_PATH]),
+ ?assertEqual({ok, Node}, Rpc).
set_location_policy(Config, Name, Strategy) ->
ok = rabbit_ct_broker_helpers:set_policy(Config, 0,
Name, <<".*">>, <<"queues">>, [{<<"queue-master-locator">>, Strategy}]).
+
+wait_for_sync(Config, Nodename, Q, ExpectedSSPidLen) ->
+ wait_for_sync(Config, Nodename, Q, ExpectedSSPidLen, 600).
+
+wait_for_sync(_, _, _, _, 0) ->
+ throw(sync_timeout);
+wait_for_sync(Config, Nodename, Q, ExpectedSSPidLen, N) ->
+ case synced(Config, Nodename, Q, ExpectedSSPidLen) of
+ true -> ok;
+ false -> timer:sleep(100),
+ wait_for_sync(Config, Nodename, Q, ExpectedSSPidLen, N-1)
+ end.
+
+synced(Config, Nodename, Q, ExpectedSSPidLen) ->
+ Info = rabbit_ct_broker_helpers:rpc(Config, Nodename,
+ rabbit_amqqueue, info_all, [<<"/">>, [name, synchronised_slave_pids]]),
+ ct:pal("synced Info: ~p~n", [Info]),
+ [SSPids] = [Pids || [{name, Q1}, {synchronised_slave_pids, Pids}] <- Info, Q =:= Q1],
+ length(SSPids) =:= ExpectedSSPidLen.