@@ -871,3 +871,55 @@ def _verify_clients(andConfirm=False):
871
871
872
872
leader .list_messages (du .domain_fanout , tc .TEST_QUEUE , 0 , 100 )
873
873
assert leader .outputs_substr (f"Printing 0 message(s)" , 5 )
874
+
875
+
876
+ @tweak .domain .message_ttl (3 )
877
+ def test_gc_old_data_new_app (cluster : Cluster , domain_urls : tc .DomainUrls ):
878
+ """Trigger old message GC in the presence of new App. Need to allocate
879
+ Apps states first.
880
+ """
881
+ du = domain_urls
882
+ leader = cluster .last_known_leader
883
+ proxies = cluster .proxy_cycle ()
884
+ proxy = next (proxies )
885
+
886
+ producer = proxy .create_client ("producer" )
887
+ producer .open (du .uri_fanout , flags = ["write,ack" ], succeed = True )
888
+
889
+ app_id = default_app_ids [0 ]
890
+ consumer = proxy .create_client (app_id )
891
+ consumer_uri = f"{ du .uri_fanout } ?id={ app_id } "
892
+ consumer .open (consumer_uri , flags = ["read" ], succeed = True )
893
+
894
+ # ---------------------------------------------------------------------
895
+ # Post a message.
896
+ producer .post (du .uri_fanout , ["m1" ], succeed = True , wait_ack = True )
897
+
898
+ # confirm, to make sure App state is allocated
899
+ consumer .wait_push_event ()
900
+
901
+ assert wait_until (
902
+ lambda : len (consumer .list (consumer_uri , block = True )) == 1 , timeout
903
+ )
904
+ assert consumer .confirm (consumer_uri , f"+{ 1 } " , block = True ) == Client .e_SUCCESS
905
+
906
+ # ---------------------------------------------------------------------
907
+ # +new_app_1
908
+ new_app_1 = "new_app_1"
909
+ set_app_ids (cluster , default_app_ids + [new_app_1 ], du )
910
+
911
+ assert consumer .close (consumer_uri , block = True ) == Client .e_SUCCESS
912
+
913
+ # Observe that the message was GC'd from the queue.
914
+ leader .capture (
915
+ f"queue \\ [{ du .uri_fanout } \\ ].*garbage-collected \\ [1\\ ] messages" , timeout = 5
916
+ )
917
+
918
+ leader .list_messages (du .domain_fanout , tc .TEST_QUEUE , 0 , 100 )
919
+ assert leader .outputs_substr (f"Printing 0 message(s)" , 5 )
920
+
921
+ leader .list_messages (du .domain_fanout , tc .TEST_QUEUE , 0 , 100 , appid = app_id )
922
+ assert leader .outputs_substr (f"Printing 0 message(s)" , 5 )
923
+
924
+ leader .list_messages (du .domain_fanout , tc .TEST_QUEUE , 0 , 100 , appid = new_app_1 )
925
+ assert leader .outputs_substr (f"Printing 0 message(s)" , 5 )
0 commit comments