File 5999-Fix-disk_log-bug-typo.patch of Package erlang
From 30da517358bf8919d0d68b05829e18142a6aabd3 Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Tue, 28 May 2024 10:01:35 +0200
Subject: [PATCH] Fix disk_log bug/typo
It returned the wrong record when checking arguments,
which caused the element `head` to be set wrongly.
---
lib/kernel/src/disk_log.erl | 7 ++++++-
lib/kernel/test/disk_log_SUITE.erl | 24 +++++++++++++++++-------
2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/lib/kernel/src/disk_log.erl b/lib/kernel/src/disk_log.erl
index c6d8922e8f..ae7b778703 100644
--- a/lib/kernel/src/disk_log.erl
+++ b/lib/kernel/src/disk_log.erl
@@ -582,7 +582,12 @@ check_arg([], Res) ->
disk_log_1:read_size_file_version(Res#arg.file),
check_wrap_arg(Ret, OldSize, Version);
Res#arg.type =:= rotate ->
- {ok, Res#arg{format = external}};
+ case Ret of
+ {ok, Patched} ->
+ {ok, Patched#arg{format = external}};
+ _ ->
+ Ret
+ end;
true ->
Ret
end;
diff --git a/lib/kernel/test/disk_log_SUITE.erl b/lib/kernel/test/disk_log_SUITE.erl
index dc4b6c4862..e099325ddf 100644
--- a/lib/kernel/test/disk_log_SUITE.erl
+++ b/lib/kernel/test/disk_log_SUITE.erl
@@ -92,7 +92,7 @@
decrease_size_with_chunk_step/1, decrease_size_twice/1]).
--export([head_fun/1, hf/0, lserv/1,
+-export([head_fun/1, hf/0, hf_bin/0, lserv/1,
measure/0, init_m/1, xx/0]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -835,8 +835,9 @@ rotate_1(Conf) when is_list(Conf) ->
ok = disk_log:close(Name),
del_rot_files(File, 4),
{ok, Name} = disk_log:open([{name,Name}, {type,rotate}, {size,{8000, 3}},
- {format,external},
- {file, File}]),
+ {format,external},
+ {head_func, {?MODULE, hf_bin, []}},
+ {file, File}]),
{B1, _T1} = x_mk_bytes(10000), % lost due to rotation
{B2, T2} = x_mk_bytes(5000), % file a.LOG.2.gx
{B3, T3} = x_mk_bytes(4000), % file a.LOG.1.gz
@@ -847,27 +848,32 @@ rotate_1(Conf) when is_list(Conf) ->
ok = disk_log:blog(Name, B2),
ok = disk_log:blog(Name, B3),
ok = disk_log:blog_terms(a, [B4, B5, B6]),
+ {ok, BinHeader} = hf_bin(),
+ Header = binary_to_list(BinHeader),
+ T20 = Header ++ T2,
case get_list(File ++ ".2.gz", Name, rotate) of
- T2 ->
+ T20 ->
ok;
E2 ->
test_server_fail({bad_terms, E2, T2})
end,
- T34 = T3 ++ T4,
+ T34 = Header ++ T3 ++ T4,
case get_list(File ++ ".1.gz", Name, rotate) of
T34 ->
ok;
E34 ->
test_server_fail({bad_terms, E34, T34})
end,
+ T50 = Header ++ T5,
case get_list(File ++ ".0.gz", Name, rotate) of
- T5 ->
+ T50 ->
ok;
E5 ->
test_server_fail({bad_terms, E5, T5})
end,
+ T60 = Header ++ T6,
case get_list(File, Name) of
- T6 ->
+ T60 ->
ok;
E6 ->
test_server_fail({bad_terms, E6, T6})
@@ -1409,6 +1415,10 @@ hf() ->
ets:update_counter(xxx, wrapc, 1),
{ok, [1,2,3]}.
+hf_bin() ->
+ {ok, <<"1", "2", "3">>}.
+
+
%% Test head parameter.
plain_head(Conf) when is_list(Conf) ->
Dir = ?privdir(Conf),
--
2.35.3