[pbs-devel] [PATCH v3 proxmox-backup 16/20] api: admin: move backup group list generation into helper
Christian Ebner
c.ebner at proxmox.com
Tue May 13 15:52:43 CEST 2025
Move the logic to generate a backup group list given backup type or
backup_id into a helper function. This allows to reuse the same logic
for generating the list of groups for which to clear trashed items.
No functional change intended.
Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
src/api2/admin/datastore.rs | 53 ++++++++++++++++++++++---------------
1 file changed, 32 insertions(+), 21 deletions(-)
diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
index 3ea5b19f1..bc2d51612 100644
--- a/src/api2/admin/datastore.rs
+++ b/src/api2/admin/datastore.rs
@@ -507,6 +507,37 @@ pub async fn list_snapshots(
.map_err(|err| format_err!("failed to await blocking task: {err}"))?
}
+fn groups_by_type_or_id(
+ datastore: Arc<DataStore>,
+ ns: &BackupNamespace,
+ backup_type: Option<BackupType>,
+ backup_id: Option<String>,
+) -> Result<Vec<BackupGroup>, Error> {
+ // FIXME: filter also owner before collecting, for doing that nicely the owner should move into
+ // backup group and provide an error free (Err -> None) accessor
+ match (backup_type, backup_id) {
+ (Some(backup_type), Some(backup_id)) => Ok(vec![datastore.backup_group_from_parts(
+ ns.clone(),
+ backup_type,
+ backup_id,
+ )]),
+ // FIXME: Recursion
+ (Some(backup_type), None) => Ok(datastore
+ .iter_backup_type_ok(ns.clone(), backup_type)?
+ .collect()),
+ // FIXME: Recursion
+ (None, Some(backup_id)) => Ok(BackupType::iter()
+ .filter_map(|backup_type| {
+ let group =
+ datastore.backup_group_from_parts(ns.clone(), backup_type, backup_id.clone());
+ group.exists().then_some(group)
+ })
+ .collect()),
+ // FIXME: Recursion
+ (None, None) => datastore.list_backup_groups(ns.clone()),
+ }
+}
+
/// This must not run in a main worker thread as it potentially does tons of I/O.
unsafe fn list_snapshots_blocking(
store: String,
@@ -528,27 +559,7 @@ unsafe fn list_snapshots_blocking(
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
- // FIXME: filter also owner before collecting, for doing that nicely the owner should move into
- // backup group and provide an error free (Err -> None) accessor
- let groups = match (backup_type, backup_id) {
- (Some(backup_type), Some(backup_id)) => {
- vec![datastore.backup_group_from_parts(ns.clone(), backup_type, backup_id)]
- }
- // FIXME: Recursion
- (Some(backup_type), None) => datastore
- .iter_backup_type_ok(ns.clone(), backup_type)?
- .collect(),
- // FIXME: Recursion
- (None, Some(backup_id)) => BackupType::iter()
- .filter_map(|backup_type| {
- let group =
- datastore.backup_group_from_parts(ns.clone(), backup_type, backup_id.clone());
- group.exists().then_some(group)
- })
- .collect(),
- // FIXME: Recursion
- (None, None) => datastore.list_backup_groups(ns.clone())?,
- };
+ let groups = groups_by_type_or_id(datastore, &ns, backup_type, backup_id)?;
let info_to_snapshot_list_item = |group: &BackupGroup, owner, info: BackupInfo| {
let backup = pbs_api_types::BackupDir {
--
2.39.5
More information about the pbs-devel
mailing list