@@ -97,7 +97,8 @@ groups() ->
97
97
force_all_queues_shrink_member_to_current_member ,
98
98
force_vhost_queues_shrink_member_to_current_member ,
99
99
policy_repair ,
100
- gh_12635
100
+ gh_12635 ,
101
+ replica_states
101
102
]
102
103
++ all_tests ()},
103
104
{cluster_size_5 , [], [start_queue ,
@@ -4352,6 +4353,54 @@ requeue_multiple_false(Config) ->
4352
4353
? assertEqual (# 'queue.delete_ok' {message_count = 0 },
4353
4354
amqp_channel :call (Ch , # 'queue.delete' {queue = QQ })).
4354
4355
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
+
4355
4404
% %----------------------------------------------------------------------------
4356
4405
4357
4406
same_elements (L1 , L2 )
0 commit comments