@@ -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
43604409same_elements (L1 , L2 )
0 commit comments