From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v3 manager 1/4] vzdump: support setting protected status
Date: Thu, 7 Apr 2022 12:05:40 +0200 [thread overview]
Message-ID: <20220407100543.130953-4-f.ebner@proxmox.com> (raw)
In-Reply-To: <20220407100543.130953-1-f.ebner@proxmox.com>
Check the number of protected backups early if the protected flag
is set.
Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
---
No changes from v2.
PVE/VZDump.pm | 43 ++++++++++++++++++++++++++++++++++---------
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index f34a5969..f0a28a76 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -4,6 +4,7 @@ use strict;
use warnings;
use Fcntl ':flock';
+use File::Basename;
use File::Path;
use IO::File;
use IO::Select;
@@ -780,21 +781,33 @@ sub exec_backup_task {
}
}
- if ($backup_limit && !$opts->{remove}) {
+ if (($backup_limit && !$opts->{remove}) || $opts->{protected}) {
my $count;
+ my $protected_count;
if (my $storeid = $opts->{storage}) {
- my $backups = PVE::Storage::volume_list($cfg, $storeid, $vmid, 'backup');
- $count = grep {
- !$_->{protected} && (!$_->{subtype} || $_->{subtype} eq $vmtype)
- } $backups->@*;
+ my @backups = grep {
+ !$_->{subtype} || $_->{subtype} eq $vmtype
+ } PVE::Storage::volume_list($cfg, $storeid, $vmid, 'backup')->@*;
+
+ $count = grep { !$_->{protected} } @backups;
+ $protected_count = scalar(@backups) - $count;
} else {
$count = grep { !$_->{mark} || $_->{mark} ne "protected" } get_backup_file_list($opts->{dumpdir}, $bkname)->@*;
}
- die "There is a max backup limit of $backup_limit enforced by the".
- " target storage or the vzdump parameters.".
- " Either increase the limit or delete old backup(s).\n"
- if $count >= $backup_limit;
+ if ($opts->{protected}) {
+ my $max_protected = PVE::Storage::get_max_protected_backups(
+ $opts->{scfg},
+ $opts->{storage},
+ );
+ if ($max_protected > -1 && $protected_count >= $max_protected) {
+ die "The number of protected backups per guest is limited to $max_protected ".
+ "on storage '$opts->{storage}'\n";
+ }
+ } elsif ($count >= $backup_limit) {
+ die "There is a max backup limit of $backup_limit enforced by the target storage ".
+ "or the vzdump parameters. Either increase the limit or delete old backups.\n";
+ }
}
if (!$self->{opts}->{pbs}) {
@@ -995,6 +1008,18 @@ sub exec_backup_task {
debugmsg ('info', "archive file size: $cs", $logfd);
}
+ # Mark as protected before pruning.
+ if (my $storeid = $opts->{storage}) {
+ my $volname = $opts->{pbs} ? $task->{target} : basename($task->{target});
+ my $volid = "${storeid}:backup/${volname}";
+
+ if ($opts->{protected}) {
+ debugmsg('info', "marking backup as protected", $logfd);
+ eval { PVE::Storage::update_volume_attribute($cfg, $volid, 'protected', 1) };
+ die "unable to set protected flag - $@\n" if $@;
+ }
+ }
+
if ($opts->{remove}) {
my $keepstr = join(', ', map { "$_=$prune_options->{$_}" } sort keys %$prune_options);
debugmsg ('info', "prune older backups with retention: $keepstr", $logfd);
--
2.30.2
next prev parent reply other threads:[~2022-04-07 10:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-07 10:05 [pve-devel] [PATCH-SEREIES v3 common/guest-common/manager] add protected and notes-template parameters for vzdump Fabian Ebner
2022-04-07 10:05 ` [pve-devel] [PATCH v3 common 1/1] REST handler: get property description: escape curly braces for asciidoc Fabian Ebner
2022-04-27 8:49 ` [pve-devel] applied: " Thomas Lamprecht
2022-04-07 10:05 ` [pve-devel] [PATCH v3 guest-common 1/1] vzdump: schema: add 'notes-template' and 'protected' properties Fabian Ebner
2022-04-07 10:05 ` Fabian Ebner [this message]
2022-04-07 10:05 ` [pve-devel] [PATCH v3 manager 2/4] partially close #438: vzdump: support setting notes-template Fabian Ebner
2022-04-07 10:05 ` [pve-devel] [PATCH v3 manager 3/4] ui: backup: allow setting protected and notes-template for manual backup Fabian Ebner
2022-04-07 10:05 ` [pve-devel] [PATCH v3 manager 4/4] close #438: ui: backup job: allow setting a notes-template for a job Fabian Ebner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220407100543.130953-4-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox