File 1286-Test-changing-wrap-disk_log-size-multiple-times.patch of Package erlang
From 8965b8d26d875b0af1ef11bee9e9bb697427528a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20W=C4=85sowski?= <michal@erlang.org>
Date: Fri, 25 Apr 2025 18:32:56 +0200
Subject: [PATCH 2/2] Test changing wrap disk_log size multiple times
---
lib/kernel/test/disk_log_SUITE.erl | 73 +++++++++++++++++++++++++++++-
1 file changed, 71 insertions(+), 2 deletions(-)
diff --git a/lib/kernel/test/disk_log_SUITE.erl b/lib/kernel/test/disk_log_SUITE.erl
index dc4b6c4862..61f09a1f66 100644
--- a/lib/kernel/test/disk_log_SUITE.erl
+++ b/lib/kernel/test/disk_log_SUITE.erl
@@ -92,7 +92,7 @@
otp_6278/1, otp_10131/1, otp_16768/1, otp_16809/1,
- decrease_size_with_chunk_step/1]).
+ decrease_size_with_chunk_step/1, decrease_size_twice/1]).
-export([head_fun/1, hf/0, lserv/1,
measure/0, init_m/1, xx/0]).
@@ -169,7 +169,8 @@ groups() ->
{change_size, [],
[change_size_before, change_size_during,
change_size_after, default_size, change_size2,
- change_size_truncate, decrease_size_with_chunk_step]}].
+ change_size_truncate, decrease_size_with_chunk_step,
+ decrease_size_twice]}].
init_per_suite(Config) ->
Config.
@@ -4447,6 +4448,73 @@ decrease_size_with_chunk_step(Conf) when is_list(Conf) ->
ok = disk_log:close(Log),
del(File, 2).
+decrease_size_twice(Conf) when is_list(Conf) ->
+ Dir = ?privdir(Conf),
+ Log = decrease_size_twice,
+ File = filename:join(Dir, lists:concat([Log, ".LOG"])),
+
+ Data_1 = [1, 2, 3],
+ Data_2 = [4, 5, 6],
+ Data_3 = [7, 8, 9],
+ Data_2_3 = Data_2 ++ Data_3,
+ Data = Data_1 ++ Data_2_3,
+
+ {ok, Log} = disk_log:open([{size, {50, 3}}, {name, Log}, {type, wrap},
+ {file, File}, {notify, true}]),
+
+ ok = disk_log:log_terms(Log, Data),
+
+ %% Changing size to the same size should make no changes
+ ok = disk_log:change_size(Log, {50, 3}),
+ Data = get_all_terms(Log),
+
+ %% Changing size to smaller and then again to the same smaller size,
+ %% should leave OldMaxF as it was before
+ ok = disk_log:change_size(Log, {50, 2}),
+ ok = disk_log:change_size(Log, {50, 2}),
+ Data = get_all_terms(Log),
+
+ %% After writing data with new (smaller) log size, some terms should be truncated
+ ok = disk_log:log_terms(Log, Data),
+ Data_2_3 = get_all_terms(Log),
+
+ %% Changing size to bigger should remove OldMaxF
+ ok = disk_log:change_size(Log, {50, 3}),
+ ok = disk_log:log_terms(Log, Data),
+ Data = get_all_terms(Log),
+
+ %% Changing size to smaller, and then to even smaller should keep bigger OldMaxF
+ ok = disk_log:change_size(Log, {50, 2}),
+ ok = disk_log:change_size(Log, {50, 1}),
+ Data = get_all_terms(Log),
+
+ %% After writing data with new (even smaller) log size, some terms should be truncated
+ ok = disk_log:log_terms(Log, Data),
+ Data_3 = get_all_terms(Log),
+
+ %% Changing size to bigger should remove OldMaxF
+ ok = disk_log:change_size(Log, {50, 3}),
+ ok = disk_log:log_terms(Log, Data),
+ Data = get_all_terms(Log),
+
+ %% Changing size to smaller, writing some data (but less than required to cause logs to wrap),
+ %% and then to even smaller should keep bigger OldMaxF
+ ok = disk_log:log_terms(Log, lists:seq(1, 7)),
+ ok = disk_log:change_size(Log, {50, 2}),
+ ok = disk_log:log_terms(Log, [8, 9]),
+ ok = disk_log:change_size(Log, {50, 1}),
+ Data = get_all_terms(Log),
+
+ %% Changing size to bigger and than to bigger again, should allow to read all data
+ ok = disk_log:change_size(Log, {50, 2}),
+ Data = get_all_terms(Log),
+ ok = disk_log:change_size(Log, {50, 3}),
+ Data = get_all_terms(Log),
+
+ ok = disk_log:close(Log),
+
+ del(File, 3).
+
mark(FileName, What) ->
{ok,Fd} = file:open(FileName, [raw, binary, read, write]),
{ok,_} = file:position(Fd, 4),
--
2.43.0