@@ -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 ,
@@ -4352,6 +4353,54 @@ requeue_multiple_false(Config) ->
43524353 ? assertEqual (# 'queue.delete_ok' {message_count = 0 },
43534354 amqp_channel :call (Ch , # 'queue.delete' {queue = QQ })).
43544355
4356+ replica_states (Config ) ->
4357+ [Server | _ ] = Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
4358+ Ch = rabbit_ct_client_helpers :open_channel (Config , Server ),
4359+
4360+ [? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
4361+ declare (Ch , Q , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]))
4362+ || Q <- [<<" Q1" >>, <<" Q2" >>, <<" Q3" >>]],
4363+
4364+ Qs = rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_amqqueue , list , []),
4365+
4366+ [Q1_ClusterName , Q2_ClusterName , Q3_ClusterName ] =
4367+ [begin
4368+ {ClusterName , _ } = amqqueue :get_pid (Q ),
4369+ ClusterName
4370+ end
4371+ || Q <- Qs , amqqueue :get_type (Q ) == rabbit_quorum_queue ],
4372+
4373+ Result1 = rabbit_misc :append_rpc_all_nodes (Servers , rabbit_quorum_queue , all_replica_states , []),
4374+ ct :pal (" all replica states: ~tp " , [Result1 ]),
4375+
4376+ lists :map (fun ({_Node , ReplicaStates }) ->
4377+ ? assert (maps :is_key (Q1_ClusterName , ReplicaStates )),
4378+ ? assert (maps :is_key (Q2_ClusterName , ReplicaStates )),
4379+ ? assert (maps :is_key (Q3_ClusterName , ReplicaStates ))
4380+ end , Result1 ),
4381+
4382+ % % Unregister a few queues (same outcome of 'noproc')
4383+ rabbit_ct_broker_helpers :rpc (Config , Server , erlang , unregister , [Q2_ClusterName ]),
4384+ rabbit_ct_broker_helpers :rpc (Config , Server , erlang , unregister , [Q3_ClusterName ]),
4385+
4386+ ? assert (undefined == rabbit_ct_broker_helpers :rpc (Config , Server , erlang , whereis , [Q2_ClusterName ])),
4387+ ? assert (undefined == rabbit_ct_broker_helpers :rpc (Config , Server , erlang , whereis , [Q3_ClusterName ])),
4388+
4389+ Result2 = rabbit_misc :append_rpc_all_nodes (Servers , rabbit_quorum_queue , all_replica_states , []),
4390+ ct :pal (" replica states with a node missing Q1 and Q2: ~tp " , [Result2 ]),
4391+
4392+ lists :map (fun ({Node , ReplicaStates }) ->
4393+ if Node == Server ->
4394+ ? assert (maps :is_key (Q1_ClusterName , ReplicaStates )),
4395+ ? assertNot (maps :is_key (Q2_ClusterName , ReplicaStates )),
4396+ ? assertNot (maps :is_key (Q3_ClusterName , ReplicaStates ));
4397+ true ->
4398+ ? assert (maps :is_key (Q1_ClusterName , ReplicaStates )),
4399+ ? assert (maps :is_key (Q2_ClusterName , ReplicaStates )),
4400+ ? assert (maps :is_key (Q3_ClusterName , ReplicaStates ))
4401+ end
4402+ end , Result2 ).
4403+
43554404% %----------------------------------------------------------------------------
43564405
43574406same_elements (L1 , L2 )
0 commit comments