diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs index dbe5abb8..a69b38fc 100644 --- a/src/api2/admin/datastore.rs +++ b/src/api2/admin/datastore.rs @@ -1007,6 +1007,10 @@ pub fn prune( store: { schema: DATASTORE_SCHEMA, }, + ns: { + type: BackupNamespace, + optional: true, + }, }, }, returns: { @@ -1022,6 +1026,7 @@ pub fn prune_datastore( dry_run: bool, prune_options: PruneOptions, store: String, + ns: Option, _param: Value, rpcenv: &mut dyn RpcEnvironment, ) -> Result { @@ -1043,8 +1048,8 @@ pub fn prune_datastore( worker, auth_id, prune_options, - &store, datastore, + ns.unwrap_or_default(), dry_run, ) }, diff --git a/src/server/prune_job.rs b/src/server/prune_job.rs index 0208fbc2..277feec7 100644 --- a/src/server/prune_job.rs +++ b/src/server/prune_job.rs @@ -4,7 +4,7 @@ use anyhow::Error; use proxmox_sys::{task_log, task_warn}; -use pbs_api_types::{Authid, Operation, PruneOptions, PRIV_DATASTORE_MODIFY}; +use pbs_api_types::{Authid, BackupNamespace, Operation, PruneOptions, PRIV_DATASTORE_MODIFY}; use pbs_config::CachedUserInfo; use pbs_datastore::prune::compute_prune_info; use pbs_datastore::DataStore; @@ -16,10 +16,12 @@ pub fn prune_datastore( worker: Arc, auth_id: Authid, prune_options: PruneOptions, - store: &str, datastore: Arc, + ns: BackupNamespace, + //max_depth: Option, // FIXME dry_run: bool, ) -> Result<(), Error> { + let store = &datastore.name(); task_log!(worker, "Starting datastore prune on store \"{}\"", store); if dry_run { @@ -42,8 +44,8 @@ pub fn prune_datastore( let privs = user_info.lookup_privs(&auth_id, &["datastore", store]); let has_privs = privs & PRIV_DATASTORE_MODIFY != 0; - // FIXME: Namespaces and recursion! - for group in datastore.iter_backup_groups(Default::default())? { + // FIXME: Namespace recursion! + for group in datastore.iter_backup_groups(ns)? { let group = group?; let list = group.list_backups()?; @@ -115,8 +117,8 @@ pub fn do_prune_job( worker.clone(), auth_id, prune_options, - &store, datastore, + BackupNamespace::default(), false, );