The logic for finding out which backups to delete was a bit weird

Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com>
---
 data/PVE/Cluster.pm | 37 +++++++++++++++----------------------
 1 file changed, 15 insertions(+), 22 deletions(-)

diff --git a/data/PVE/Cluster.pm b/data/PVE/Cluster.pm
index 2920ff6..27b1c97 100644
--- a/data/PVE/Cluster.pm
+++ b/data/PVE/Cluster.pm
@@ -1743,36 +1743,29 @@ sub assert_joinable {
     }
 }
 
+# NOTE: filesystem must be offline here, no DB changes allowed
 my $backup_cfs_database = sub {
     my ($dbfile) = @_;
 
     mkdir $dbbackupdir;
 
-    print "backup old database\n";
     my $ctime = time();
-    my $cmd = [
-       ['echo', '.dump'],
-       ['sqlite3', $dbfile],
-       ['gzip', '-', \ ">${dbbackupdir}/config-${ctime}.sql.gz"],
-    ];
-
-    PVE::Tools::run_command($cmd, 'errmsg' => "cannot backup old database\n");
-
-    # purge older backup
-    my $maxfiles = 10;
-    my @bklist = ();
-    foreach my $fn (<$dbbackupdir/config-*.sql.gz>) {
-       if ($fn =~ m!/config-(\d+)\.sql.gz$!) {
-           push @bklist, [$fn, $1];
+    my $backup_fn = "$dbbackupdir/config-$ctime.sql.gz";
+
+    print "backup old database to '$backup_fn'\n";
+
+    my $cmd = [ ['sqlite3', $dbfile, '.dump'], ['gzip', '-', \ 
">${backup_fn}"] ];
+    run_command($cmd, 'errmsg' => "cannot backup old database\n");
+
+    my $maxfiles = 10; # purge older backup
+    my $backups = [ sort { $b cmp $a } <$dbbackupdir/config-*.sql.gz> ];
+
+    if ((my $count = scalar(@$backups)) > $maxfiles) {
+       foreach my $f (@$backups[$maxfiles..$count-1]) {
+           print "delete old backup '$1'\n";
+           unlink $1;
        }
     }
-
-    @bklist = sort { $b->[1] <=> $a->[1] } @bklist;
-    while (scalar (@bklist) >= $maxfiles) {
-       my $d = pop @bklist;
-       print "delete old backup '$d->[0]'\n";
-       unlink $d->[0];
-    }
 };
 
 sub join {
-- 
2.14.2


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to