From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup 03/12] add protected info of snapshots to api and task logs
Date: Mon, 6 Sep 2021 12:57:46 +0200 [thread overview]
Message-ID: <20210906105755.2651203-4-d.csapak@proxmox.com> (raw)
In-Reply-To: <20210906105755.2651203-1-d.csapak@proxmox.com>
adds the info that a snapshot is protected to:
* snapshot list
* manual pruning (also dry-run)
* prune jobs
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
pbs-api-types/src/lib.rs | 2 ++
pbs-datastore/src/prune.rs | 11 +++++++----
src/api2/admin/datastore.rs | 11 ++++++++---
src/server/prune_job.rs | 4 ++--
4 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs
index 427b2d9f..eba68ce5 100644
--- a/pbs-api-types/src/lib.rs
+++ b/pbs-api-types/src/lib.rs
@@ -411,6 +411,8 @@ pub struct SnapshotListItem {
/// The owner of the snapshots group
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<Authid>,
+ /// Protection from prunes
+ pub protected: bool,
}
#[api(
diff --git a/pbs-datastore/src/prune.rs b/pbs-datastore/src/prune.rs
index 6b76e9d7..6b9c2bbb 100644
--- a/pbs-datastore/src/prune.rs
+++ b/pbs-datastore/src/prune.rs
@@ -225,7 +225,7 @@ impl PruneOptions {
pub fn compute_prune_info(
mut list: Vec<BackupInfo>,
options: &PruneOptions,
-) -> Result<Vec<(BackupInfo, bool)>, Error> {
+) -> Result<Vec<(BackupInfo, bool, bool)>, Error> {
let mut mark = HashMap::new();
@@ -273,15 +273,18 @@ pub fn compute_prune_info(
})?;
}
- let prune_info: Vec<(BackupInfo, bool)> = list.into_iter()
+ let prune_info: Vec<(BackupInfo, bool, bool)> = list.into_iter()
.map(|info| {
let backup_id = info.backup_dir.relative_path();
+ let protected = info.protected;
let keep = match mark.get(&backup_id) {
Some(PruneMark::Keep) => true,
Some(PruneMark::KeepPartial) => true,
- _ => false,
+ Some(PruneMark::Protected) => true,
+ _ => if protected { true } else { false },
};
- (info, keep)
+
+ (info, keep, protected)
})
.collect();
diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
index 5470de73..f49cdbee 100644
--- a/src/api2/admin/datastore.rs
+++ b/src/api2/admin/datastore.rs
@@ -444,6 +444,7 @@ pub fn list_snapshots (
let backup_type = group.backup_type().to_string();
let backup_id = group.backup_id().to_string();
let backup_time = info.backup_dir.backup_time();
+ let protected = info.backup_dir.is_protected(base_path.clone());
match get_all_snapshot_files(&datastore, &info) {
Ok((manifest, files)) => {
@@ -482,6 +483,7 @@ pub fn list_snapshots (
files,
size,
owner,
+ protected,
}
},
Err(err) => {
@@ -506,6 +508,7 @@ pub fn list_snapshots (
files,
size: None,
owner,
+ protected,
}
},
}
@@ -849,7 +852,7 @@ pub fn prune(
let keep_all = !prune_options.keeps_something();
if dry_run {
- for (info, mut keep) in prune_info {
+ for (info, mut keep, protected) in prune_info {
if keep_all { keep = true; }
let backup_time = info.backup_dir.backup_time();
@@ -860,6 +863,7 @@ pub fn prune(
"backup-id": group.backup_id(),
"backup-time": backup_time,
"keep": keep,
+ "protected": protected,
}));
}
return Ok(json!(prune_result));
@@ -877,7 +881,7 @@ pub fn prune(
store, backup_type, backup_id));
}
- for (info, mut keep) in prune_info {
+ for (info, mut keep, protected) in prune_info {
if keep_all { keep = true; }
let backup_time = info.backup_dir.backup_time();
@@ -890,7 +894,7 @@ pub fn prune(
group.backup_type(),
group.backup_id(),
timestamp,
- if keep { "keep" } else { "remove" },
+ if keep { if protected { "keep (protected)" } else { "keep" } } else { "remove" },
);
worker.log(msg);
@@ -900,6 +904,7 @@ pub fn prune(
"backup-id": group.backup_id(),
"backup-time": backup_time,
"keep": keep,
+ "protected": protected,
}));
if !(dry_run || keep) {
diff --git a/src/server/prune_job.rs b/src/server/prune_job.rs
index 2ea8b713..bfe2bd9e 100644
--- a/src/server/prune_job.rs
+++ b/src/server/prune_job.rs
@@ -66,12 +66,12 @@ pub fn prune_datastore(
group.backup_id()
);
- for (info, mut keep) in prune_info {
+ for (info, mut keep, protected) in prune_info {
if keep_all { keep = true; }
task_log!(
worker,
"{} {}/{}/{}",
- if keep { "keep" } else { "remove" },
+ if keep { if protected { "keep (protected)" } else { "keep" } } else { "remove" },
group.backup_type(),
group.backup_id(),
info.backup_dir.backup_time_string()
--
2.30.2
next prev parent reply other threads:[~2021-09-06 10:58 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-06 10:57 [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 01/12] pbs-datastore: add protection info to BackupInfo Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 02/12] pbs-datastore: skip protected backups in pruning Dominik Csapak
2021-09-06 10:57 ` Dominik Csapak [this message]
[not found] ` <<20210906105755.2651203-4-d.csapak@proxmox.com>
2021-09-16 10:04 ` [pbs-devel] [PATCH proxmox-backup 03/12] add protected info of snapshots to api and task logs Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 04/12] tests/prune: add tests for protecteded backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 05/12] backup/datastore: prevent protected snapshots to be removed Dominik Csapak
[not found] ` <<20210906105755.2651203-6-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 06/12] pull_store/group: dont try remove locally protected snapshots Dominik Csapak
2021-09-16 10:08 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 07/12] api2: datastore/delete_group: throw error for partially removed group Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 08/12] api2/admin/datastore: add get/set_protection Dominik Csapak
2021-09-10 12:43 ` Fabian Ebner
2021-09-13 8:34 ` Dominik Csapak
2021-09-16 10:16 ` Fabian Ebner
2021-09-17 12:02 ` Fabian Ebner
[not found] ` <<<20210906105755.2651203-9-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 09/12] proxmox-backup-client: add 'protected update command' Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 10/12] ui: PruneInputPanel: add keepReason 'protected' for protected backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 11/12] ui: add protected icon to snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 12/12] fix #3602: ui: datastore/Content: add action to set protection status Dominik Csapak
[not found] ` <<20210906105755.2651203-1-d.csapak@proxmox.com>
2021-09-16 10:08 ` [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots 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=20210906105755.2651203-4-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal