From: Fabian Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v2 manager 4/8] vzdump: support setting protected status
Date: Tue, 29 Mar 2022 14:53:20 +0200 [thread overview]
Message-ID: <20220329125324.120737-9-f.ebner@proxmox.com> (raw)
In-Reply-To: <20220329125324.120737-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>
---
Changes from v1:
* Split setting notes (now notes-template) into its own patch.
* Use new helper from storage to determine max-protected-backups.
PVE/VZDump.pm | 43 ++++++++++++++++++++++++++++++++++---------
1 file changed, 34 insertions(+), 9 deletions(-)
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index fe8a9b28..eab4f240 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;
@@ -779,21 +780,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 = scalar(get_unprotected_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}) {
@@ -994,6 +1007,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-03-29 12:53 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-29 12:53 [pve-devel] [PATCH-SERIES v2 storage/manager/guest-common/docs] improvements for protected backups Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 storage 1/1] plugins: allow limiting the number of protected backups per guest Fabian Ebner
2022-04-06 10:42 ` [pve-devel] applied: " Fabian Grünbichler
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 1/8] vzdump: backup file list: drop unused parameter Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 2/8] vzdump: backup limit: only count unprotected backups Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [RFC v2 manager 3/8] ui: storage edit: retention: add max-protected-backups setting Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 docs 1/2] storage: switch to prune-backups in examples Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 docs 2/2] vzdump/storage: mention protected backups limit and give an example Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 guest-common 1/1] vzdump: schema: add 'notes-template' and 'protected' properties Fabian Ebner
2022-03-29 12:53 ` Fabian Ebner [this message]
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 5/8] partially close #438: vzdump: support setting notes-template Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 6/8] ui: backup: allow setting protected and notes-template for manual backup Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 7/8] close #438: ui: backup job: allow setting a notes-template for a job Fabian Ebner
2022-03-29 12:53 ` [pve-devel] [PATCH v2 manager 8/8] ui: backup job: set guest name as default notes-template Fabian Ebner
2022-04-06 12:10 ` [pve-devel] partially-applied: [PATCH-SERIES v2 storage/manager/guest-common/docs] improvements for protected backups Fabian Grünbichler
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=20220329125324.120737-9-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