@@ -53,6 +53,8 @@ all_tests() ->
5353 replica_unknown_command ,
5454 diverged_replica ,
5555 retention ,
56+ retention_max_age_eventually ,
57+ retention_max_age_update_retention ,
5658 retention_add_replica_after ,
5759 retention_overtakes_offset_reader ,
5860 update_retention ,
@@ -1033,6 +1035,7 @@ retention(Config) ->
10331035 Num = 150000 ,
10341036 Name = ? config (cluster_name , Config ),
10351037 SegSize = 50000 * 1000 ,
1038+ % % silly low setting
10361039 Conf0 =
10371040 #{name => Name ,
10381041 epoch => 1 ,
@@ -1051,6 +1054,58 @@ retention(Config) ->
10511054 osiris :stop_cluster (Conf1 ),
10521055 ok .
10531056
1057+ retention_max_age_eventually (Config ) ->
1058+ DataDir = ? config (data_dir , Config ),
1059+ Num = 150000 ,
1060+ Name = ? config (cluster_name , Config ),
1061+ SegSize = 50000 * 1000 ,
1062+ application :set_env (osiris , retention_eval_interval , 5000 ),
1063+ Conf0 =
1064+ #{name => Name ,
1065+ epoch => 1 ,
1066+ leader_node => node (),
1067+ retention => [{max_age , 5000 }],
1068+ max_segment_size_bytes => SegSize ,
1069+ replica_nodes => []},
1070+ {ok , #{leader_pid := Leader , replica_pids := []} = Conf1 } =
1071+ osiris :start_cluster (Conf0 ),
1072+ timer :sleep (100 ),
1073+ write_n (Leader , Num , 0 , 1000 * 8 , #{}),
1074+ Wc = filename :join ([DataDir , ? FUNCTION_NAME , " *.segment" ]),
1075+ % % one file only
1076+ await_condition (fun () ->
1077+ length (filelib :wildcard (Wc )) == 1
1078+ end , 1000 , 20 ),
1079+ osiris :stop_cluster (Conf1 ),
1080+ ok .
1081+
1082+ retention_max_age_update_retention (Config ) ->
1083+ % % ensure a retention update cancels the current scheduled
1084+ % % retention evaluation
1085+ DataDir = ? config (data_dir , Config ),
1086+ Num = 150000 ,
1087+ Name = ? config (cluster_name , Config ),
1088+ SegSize = 50000 * 1000 ,
1089+ application :set_env (osiris , retention_eval_interval , 5000 ),
1090+ Conf0 =
1091+ #{name => Name ,
1092+ epoch => 1 ,
1093+ leader_node => node (),
1094+ retention => [{max_age , 5000 }],
1095+ max_segment_size_bytes => SegSize ,
1096+ replica_nodes => []},
1097+ {ok , #{leader_pid := Leader , replica_pids := []} = Conf1 } =
1098+ osiris :start_cluster (Conf0 ),
1099+ timer :sleep (100 ),
1100+ write_n (Leader , Num , 0 , 1000 * 8 , #{}),
1101+ Wc = filename :join ([DataDir , ? FUNCTION_NAME , " *.segment" ]),
1102+ ok = osiris :update_retention (Leader , [{max_bytes , SegSize * 10 }]),
1103+ timer :sleep (10000 ),
1104+ % % one file only
1105+ ? assertNot (length (filelib :wildcard (Wc )) == 1 ),
1106+ osiris :stop_cluster (Conf1 ),
1107+ ok .
1108+
10541109retention_add_replica_after (Config ) ->
10551110 DataDir = ? config (data_dir , Config ),
10561111 Num = 150000 ,
@@ -1960,4 +2015,19 @@ simple(Bin) ->
19602015 S = byte_size (Bin ),
19612016 <<0 :1 , S :31 , Bin /binary >>.
19622017
2018+ await_condition (_CondFun , _Sleep , 0 ) ->
2019+ exit (await_condition_attempts_exceeded );
2020+ await_condition (CondFun , Sleep , Attempt ) ->
2021+ timer :sleep (Sleep ),
2022+ try CondFun () of
2023+ true ->
2024+ ok ;
2025+ false ->
2026+ await_condition (CondFun , Sleep , Attempt - 1 )
2027+ catch
2028+ _ :Err ->
2029+ ct :pal (" ~s err ~p " , [? FUNCTION_NAME , Err ]),
2030+ await_condition (CondFun , Sleep , Attempt - 1 )
2031+ end .
2032+
19632033
0 commit comments