aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2019-04-16 16:37:35 +0200
committerErlang/OTP <[email protected]>2019-04-16 16:37:35 +0200
commitc160968d28931bac6895004a780111f2d6306527 (patch)
tree4efd81fe25f04f6c745e59541a565c3ac1534b0b /lib
parent4351793954bc554c95a91d659e3f472b8b98d16c (diff)
parentebfeb2bb5046143c4da2bcc8141b40b29448717b (diff)
downloadotp-c160968d28931bac6895004a780111f2d6306527.tar.gz
otp-c160968d28931bac6895004a780111f2d6306527.tar.bz2
otp-c160968d28931bac6895004a780111f2d6306527.zip
Merge branch 'siri/ct/safe-write-log-cache/ERIERL-342/OTP-15758' into maint-20
* siri/ct/safe-write-log-cache/ERIERL-342/OTP-15758: [ct] Make sure log cache file is completely written before it is read
Diffstat (limited to 'lib')
-rw-r--r--lib/common_test/src/ct_logs.erl14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index fb6a095b57..9f9f4ceaf7 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -151,7 +151,7 @@ close(Info, StartDir) ->
ok;
CacheBin ->
%% save final version of the log cache to file
- _ = file:write_file(?log_cache_name,CacheBin),
+ write_log_cache(CacheBin),
put(ct_log_cache,undefined)
end
end,
@@ -2032,7 +2032,7 @@ update_all_runs_in_cache(AllRunsData) ->
%% read from file as long as this logger process is alive
put(ct_log_cache,term_to_binary(LogCache));
_ ->
- file:write_file(?log_cache_name,term_to_binary(LogCache))
+ write_log_cache(term_to_binary(LogCache))
end;
SavedLogCache ->
update_all_runs_in_cache(AllRunsData,binary_to_term(SavedLogCache))
@@ -2046,7 +2046,7 @@ update_all_runs_in_cache(AllRunsData, LogCache) ->
%% read from file as long as this logger process is alive
put(ct_log_cache,term_to_binary(LogCache1));
_ ->
- file:write_file(?log_cache_name,term_to_binary(LogCache1))
+ write_log_cache(term_to_binary(LogCache1))
end.
sort_all_runs(Dirs) ->
@@ -2690,7 +2690,7 @@ update_tests_in_cache(TempData,LogCache=#log_cache{tests=Tests}) ->
{_Pid,_Pid} ->
put(ct_log_cache,CacheBin);
_ ->
- file:write_file(?log_cache_name,CacheBin)
+ write_log_cache(CacheBin)
end.
%%
@@ -3438,3 +3438,9 @@ unexpected_io(Pid, _Category, _Importance, Content, CtLogFd, EscChars) ->
Data = io_lib:format("~ts", [lists:foldl(IoFun, [], Content)]),
test_server_io:print_unexpected(Data),
ok.
+
+write_log_cache(LogCacheBin) when is_binary(LogCacheBin) ->
+ TmpFile = ?log_cache_name++".tmp",
+ _ = file:write_file(TmpFile,LogCacheBin),
+ _ = file:rename(TmpFile,?log_cache_name),
+ ok.