File 1326-mnesia-Delay-old-backup-deletion.patch of Package erlang

From 0253ba63ec18bd3ce7508d7659179df228983e2b Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Wed, 9 Aug 2023 11:50:28 +0200
Subject: [PATCH] mnesia: Delay old backup deletion

So that if the backup fails, the old backup still exists.
---
 lib/mnesia/src/mnesia_backup.erl       | 2 +-
 lib/mnesia/test/mnesia_evil_backup.erl | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/mnesia/src/mnesia_backup.erl b/lib/mnesia/src/mnesia_backup.erl
index 719e010c17..5e17a27f99 100644
--- a/lib/mnesia/src/mnesia_backup.erl
+++ b/lib/mnesia/src/mnesia_backup.erl
@@ -79,7 +79,6 @@ open_write(OpaqueData) ->
     File = OpaqueData,
     Tmp = lists:concat([File,".BUPTMP"]),
     file:delete(Tmp),
-    file:delete(File),
     case disk_log:open([{name, make_ref()},
 			{file, Tmp},
 			{repair, false},
@@ -112,6 +111,7 @@ commit_write(OpaqueData) ->
         ok ->
             case disk_log:close(B#backup.file_desc) of
                 ok ->
+                    file:delete(B#backup.file),
 		    case file:rename(B#backup.tmp_file, B#backup.file) of
 		       ok ->
 			    {ok, B#backup.file};
diff --git a/lib/mnesia/test/mnesia_evil_backup.erl b/lib/mnesia/test/mnesia_evil_backup.erl
index 45b11f2f3f..7901b9149a 100644
--- a/lib/mnesia/test/mnesia_evil_backup.erl
+++ b/lib/mnesia/test/mnesia_evil_backup.erl
@@ -141,7 +141,7 @@ global_backup_checkpoint(Config) when is_list(Config) ->
     ?match(ok, mnesia:backup_checkpoint(cp_name, File)),
     ?match({error, _}, mnesia:backup_checkpoint(cp_name_nonexist, File)),
     ?match(ok, mnesia:backup_checkpoint(cp_name, File2, mnesia_backup)),
-    ?match({error, _}, file:delete(File)),
+    ?match(ok, file:delete(File)),
     ?match(ok, file:delete(File2)),
     ?verify_mnesia(Nodes, []).
 
@@ -761,7 +761,10 @@ sops_with_checkpoint(Config) when is_list(Config) ->
     ?match(ok, mnesia:dirty_write({Tab,8,-8})),
 
     ?match({atomic,ok}, mnesia:delete_table(Tab)),
+    ?match(true, filelib:is_file(File2)),
     ?match({error,_}, mnesia:backup_checkpoint(cp2, File2)),
+    ?match(true, filelib:is_file(File2)),
+
     ?match({'EXIT',_}, mnesia:dirty_write({Tab,9,-9})),
 
     ?match({atomic,_}, mnesia:restore(File1, [{default_op, recreate_tables}])),
@@ -772,6 +775,7 @@ sops_with_checkpoint(Config) when is_list(Config) ->
 		     end
 	   end,
     [Test(N) || N <- mnesia:dirty_all_keys(Tab)],
+    ok = file:delete(File2),
     ?match({aborted,enoent}, mnesia:restore(File2, [{default_op, recreate_tables}])),
 
     %% Mnesia crashes when deleting a table during backup
-- 
2.35.3

openSUSE Build Service is sponsored by