diff options
author | Erlang/OTP <[email protected]> | 2019-04-16 16:37:35 +0200 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2019-04-16 16:37:35 +0200 |
commit | c160968d28931bac6895004a780111f2d6306527 (patch) | |
tree | 4efd81fe25f04f6c745e59541a565c3ac1534b0b /lib/common_test | |
parent | 4351793954bc554c95a91d659e3f472b8b98d16c (diff) | |
parent | ebfeb2bb5046143c4da2bcc8141b40b29448717b (diff) | |
download | otp-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/common_test')
-rw-r--r-- | lib/common_test/src/ct_logs.erl | 14 |
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. |