@@ -142,6 +142,7 @@ cluster_size_3_tests() ->
142
142
flow_quorum_queue ,
143
143
flow_stream ,
144
144
rabbit_mqtt_qos0_queue ,
145
+ rabbit_mqtt_qos0_queue_kill_node ,
145
146
cli_list_queues ,
146
147
delete_create_queue ,
147
148
session_reconnect ,
@@ -1212,6 +1213,40 @@ rabbit_mqtt_qos0_queue(Config) ->
1212
1213
ok = emqtt :disconnect (Sub ),
1213
1214
ok = emqtt :disconnect (Pub ).
1214
1215
1216
+ rabbit_mqtt_qos0_queue_kill_node (Config ) ->
1217
+ Topic = atom_to_binary (? FUNCTION_NAME ),
1218
+ Pub = connect (<<" publisher" >>, Config , 2 , []),
1219
+
1220
+ SubscriberId = <<" subscriber" >>,
1221
+ Sub0 = connect (SubscriberId , Config , 0 , []),
1222
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub0 , Topic , qos0 ),
1223
+ ok = emqtt :publish (Pub , Topic , <<" m0" >>, qos0 ),
1224
+ ok = expect_publishes (Sub0 , Topic , [<<" m0" >>]),
1225
+
1226
+ process_flag (trap_exit , true ),
1227
+ ok = rabbit_ct_broker_helpers :kill_node (Config , 0 ),
1228
+ % % Wait a bit to ensure that Mnesia deletes the queue record on nodes 1 and 2 from Mnesia
1229
+ % % table rabbit_queue (but the queue record is still present in rabbit_durable_queue).
1230
+ timer :sleep (500 ),
1231
+ Sub1 = connect (SubscriberId , Config , 1 , []),
1232
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub1 , Topic , qos0 ),
1233
+ ok = emqtt :publish (Pub , Topic , <<" m1" >>, qos0 ),
1234
+ ok = expect_publishes (Sub1 , Topic , [<<" m1" >>]),
1235
+
1236
+ % % Start node 0 to have a majority for Khepri.
1237
+ ok = rabbit_ct_broker_helpers :start_node (Config , 0 ),
1238
+ ok = rabbit_ct_broker_helpers :kill_node (Config , 1 ),
1239
+ % % This time, do not wait. Mnesia will contain the queue record in rabbit_durable_queue,
1240
+ % % but this time Mnesia may or may not contain the queue record in rabbit_queue.
1241
+ Sub2 = connect (SubscriberId , Config , 2 , []),
1242
+ {ok , _ , [0 ]} = emqtt :subscribe (Sub2 , Topic , qos0 ),
1243
+ ok = emqtt :publish (Pub , Topic , <<" m2" >>, qos0 ),
1244
+ ok = expect_publishes (Sub2 , Topic , [<<" m2" >>]),
1245
+
1246
+ ok = emqtt :disconnect (Sub2 ),
1247
+ ok = emqtt :disconnect (Pub ),
1248
+ ok = rabbit_ct_broker_helpers :start_node (Config , 1 ).
1249
+
1215
1250
% % Test that MQTT connection can be listed and closed via the rabbitmq_management plugin.
1216
1251
management_plugin_connection (Config ) ->
1217
1252
KeepaliveSecs = 99 ,
0 commit comments