Skip to content

Commit 2ff561a

Browse files
Ayanda-Dmergify[bot]
authored andcommitted
Add test for rabbit_quorum_queue:all_replica_states/0
and ensure non-existent/inactive/noproc QQ members are not reported. (cherry picked from commit 4e2c62b) (cherry picked from commit 6bb4c89)
1 parent b32af9e commit 2ff561a

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

deps/rabbit/test/quorum_queue_SUITE.erl

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ groups() ->
9797
force_all_queues_shrink_member_to_current_member,
9898
force_vhost_queues_shrink_member_to_current_member,
9999
policy_repair,
100-
gh_12635
100+
gh_12635,
101+
replica_states
101102
]
102103
++ all_tests()},
103104
{cluster_size_5, [], [start_queue,
@@ -4355,6 +4356,54 @@ requeue_multiple_false(Config) ->
43554356
?assertEqual(#'queue.delete_ok'{message_count = 0},
43564357
amqp_channel:call(Ch, #'queue.delete'{queue = QQ})).
43574358

4359+
replica_states(Config) ->
4360+
[Server | _] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
4361+
Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
4362+
4363+
[?assertEqual({'queue.declare_ok', Q, 0, 0},
4364+
declare(Ch, Q, [{<<"x-queue-type">>, longstr, <<"quorum">>}]))
4365+
|| Q <- [<<"Q1">>, <<"Q2">>, <<"Q3">>]],
4366+
4367+
Qs = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, list, []),
4368+
4369+
[Q1_ClusterName, Q2_ClusterName, Q3_ClusterName] =
4370+
[begin
4371+
{ClusterName, _} = amqqueue:get_pid(Q),
4372+
ClusterName
4373+
end
4374+
|| Q <- Qs, amqqueue:get_type(Q) == rabbit_quorum_queue],
4375+
4376+
Result1 = rabbit_misc:append_rpc_all_nodes(Servers, rabbit_quorum_queue, all_replica_states, []),
4377+
ct:pal("all replica states: ~tp", [Result1]),
4378+
4379+
lists:map(fun({_Node, ReplicaStates}) ->
4380+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4381+
?assert(maps:is_key(Q2_ClusterName, ReplicaStates)),
4382+
?assert(maps:is_key(Q3_ClusterName, ReplicaStates))
4383+
end, Result1),
4384+
4385+
%% Unregister a few queues (same outcome of 'noproc')
4386+
rabbit_ct_broker_helpers:rpc(Config, Server, erlang, unregister, [Q2_ClusterName]),
4387+
rabbit_ct_broker_helpers:rpc(Config, Server, erlang, unregister, [Q3_ClusterName]),
4388+
4389+
?assert(undefined == rabbit_ct_broker_helpers:rpc(Config, Server, erlang, whereis, [Q2_ClusterName])),
4390+
?assert(undefined == rabbit_ct_broker_helpers:rpc(Config, Server, erlang, whereis, [Q3_ClusterName])),
4391+
4392+
Result2 = rabbit_misc:append_rpc_all_nodes(Servers, rabbit_quorum_queue, all_replica_states, []),
4393+
ct:pal("replica states with a node missing Q1 and Q2: ~tp", [Result2]),
4394+
4395+
lists:map(fun({Node, ReplicaStates}) ->
4396+
if Node == Server ->
4397+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4398+
?assertNot(maps:is_key(Q2_ClusterName, ReplicaStates)),
4399+
?assertNot(maps:is_key(Q3_ClusterName, ReplicaStates));
4400+
true ->
4401+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4402+
?assert(maps:is_key(Q2_ClusterName, ReplicaStates)),
4403+
?assert(maps:is_key(Q3_ClusterName, ReplicaStates))
4404+
end
4405+
end, Result2).
4406+
43584407
%%----------------------------------------------------------------------------
43594408

43604409
same_elements(L1, L2)

0 commit comments

Comments
 (0)