@@ -34,6 +34,7 @@ all() ->
34
34
{group , cluster_size_3 },
35
35
{group , cluster_size_3_1 },
36
36
{group , cluster_size_3_2 },
37
+ {group , cluster_size_3_3 },
37
38
{group , cluster_size_3_parallel_1 },
38
39
{group , cluster_size_3_parallel_2 },
39
40
{group , cluster_size_3_parallel_3 },
@@ -79,6 +80,7 @@ groups() ->
79
80
{cluster_size_3_2 , [], [recover ,
80
81
declare_with_node_down_1 ,
81
82
declare_with_node_down_2 ]},
83
+ {cluster_size_3_3 , [], [consume_while_deleting_replica ]},
82
84
{cluster_size_3_parallel_1 , [parallel ], [
83
85
delete_replica ,
84
86
delete_last_replica ,
@@ -207,6 +209,7 @@ init_per_group1(Group, Config) ->
207
209
cluster_size_3_parallel_5 -> 3 ;
208
210
cluster_size_3_1 -> 3 ;
209
211
cluster_size_3_2 -> 3 ;
212
+ cluster_size_3_3 -> 3 ;
210
213
unclustered_size_3_1 -> 3 ;
211
214
unclustered_size_3_2 -> 3 ;
212
215
unclustered_size_3_3 -> 3 ;
@@ -1671,6 +1674,45 @@ consume_from_replica(Config) ->
1671
1674
receive_batch (Ch2 , 0 , 99 ),
1672
1675
rabbit_ct_broker_helpers :rpc (Config , 0 , ? MODULE , delete_testcase_queue , [Q ]).
1673
1676
1677
+ consume_while_deleting_replica (Config ) ->
1678
+ [Server1 , _ , Server3 ] = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
1679
+
1680
+ Ch1 = rabbit_ct_client_helpers :open_channel (Config , Server1 ),
1681
+ Q = ? config (queue_name , Config ),
1682
+
1683
+ ? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
1684
+ declare (Config , Server1 , Q , [{<<" x-queue-type" >>, longstr , <<" stream" >>}])),
1685
+
1686
+ rabbit_ct_helpers :await_condition (
1687
+ fun () ->
1688
+ Info = find_queue_info (Config , 1 , [online ]),
1689
+ length (proplists :get_value (online , Info )) == 3
1690
+ end ),
1691
+
1692
+ Ch2 = rabbit_ct_client_helpers :open_channel (Config , Server3 ),
1693
+ qos (Ch2 , 10 , false ),
1694
+
1695
+ CTag = atom_to_binary (? FUNCTION_NAME ),
1696
+ subscribe (Ch2 , Q , false , 0 , CTag ),
1697
+
1698
+ % % Delete replica in node 3
1699
+ rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_stream_queue ,
1700
+ delete_replica , [<<" /" >>, Q , Server3 ]),
1701
+
1702
+ publish_confirm (Ch1 , Q , [<<" msg1" >> || _ <- lists :seq (1 , 100 )]),
1703
+
1704
+ % % no messages should be received
1705
+ receive
1706
+ # 'basic.cancel' {consumer_tag = CTag } ->
1707
+ ok ;
1708
+ {_ , # amqp_msg {}} ->
1709
+ exit (unexpected_message )
1710
+ after 30000 ->
1711
+ exit (missing_consumer_cancel )
1712
+ end ,
1713
+
1714
+ rabbit_ct_broker_helpers :rpc (Config , 0 , ? MODULE , delete_testcase_queue , [Q ]).
1715
+
1674
1716
consume_credit (Config ) ->
1675
1717
% % Because osiris provides one chunk on every read and we don't want to buffer
1676
1718
% % messages in the broker to avoid memory penalties, the credit value won't
0 commit comments