From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v2 3/6] api: admin: datastore: refactor BackupGroup to GroupListItem conversion
Date: Wed, 8 Oct 2025 15:43:33 +0200 [thread overview]
Message-ID: <20251008134344.3512958-5-d.csapak@proxmox.com> (raw)
In-Reply-To: <20251008134344.3512958-1-d.csapak@proxmox.com>
We will reuse this later.
No functionial change intended.
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
no changes in v2
src/api2/admin/datastore.rs | 107 +++++++++++++++++++++---------------
1 file changed, 62 insertions(+), 45 deletions(-)
diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
index a098aca8e..26799de6e 100644
--- a/src/api2/admin/datastore.rs
+++ b/src/api2/admin/datastore.rs
@@ -142,57 +142,74 @@ pub fn list_groups(
.try_fold(Vec::new(), |mut group_info, group| {
let group = group?;
- let owner = match datastore.get_owner(&ns, group.as_ref()) {
- Ok(auth_id) => auth_id,
- Err(err) => {
- eprintln!(
- "Failed to get owner of group '{}' in {} - {}",
- group.group(),
- print_store_and_ns(&store, &ns),
- err
- );
- return Ok(group_info);
- }
- };
- if !list_all && check_backup_owner(&owner, &auth_id).is_err() {
- return Ok(group_info);
+ let item =
+ backup_group_to_group_list_item(datastore.clone(), group, &ns, &auth_id, list_all);
+
+ if let Some(item) = item {
+ group_info.push(item);
}
- let snapshots = match group.list_backups() {
- Ok(snapshots) => snapshots,
- Err(_) => return Ok(group_info),
- };
+ Ok(group_info)
+ })
+}
- let backup_count: u64 = snapshots.len() as u64;
- if backup_count == 0 {
- return Ok(group_info);
- }
+fn backup_group_to_group_list_item(
+ datastore: Arc<DataStore>,
+ group: pbs_datastore::BackupGroup,
+ ns: &BackupNamespace,
+ auth_id: &Authid,
+ list_all: bool,
+) -> Option<GroupListItem> {
+ let owner = match datastore.get_owner(ns, group.as_ref()) {
+ Ok(auth_id) => auth_id,
+ Err(err) => {
+ eprintln!(
+ "Failed to get owner of group '{}' in {} - {}",
+ group.group(),
+ print_store_and_ns(datastore.name(), ns),
+ err
+ );
+ return None;
+ }
+ };
+ if !list_all && check_backup_owner(&owner, auth_id).is_err() {
+ return None;
+ }
- let last_backup = snapshots
- .iter()
- .fold(&snapshots[0], |a, b| {
- if a.is_finished() && a.backup_dir.backup_time() > b.backup_dir.backup_time() {
- a
- } else {
- b
- }
- })
- .to_owned();
-
- let notes_path = datastore.group_notes_path(&ns, group.as_ref());
- let comment = file_read_firstline(notes_path).ok();
-
- group_info.push(GroupListItem {
- backup: group.into(),
- last_backup: last_backup.backup_dir.backup_time(),
- owner: Some(owner),
- backup_count,
- files: last_backup.files,
- comment,
- });
+ let snapshots = match group.list_backups() {
+ Ok(snapshots) => snapshots,
+ Err(_) => return None,
+ };
- Ok(group_info)
+ let backup_count: u64 = snapshots.len() as u64;
+ if backup_count == 0 {
+ return None;
+ }
+
+ let last_backup = snapshots
+ .iter()
+ .fold(&snapshots[0], |a, b| {
+ if a.is_finished() && a.backup_dir.backup_time() > b.backup_dir.backup_time() {
+ a
+ } else {
+ b
+ }
})
+ .to_owned();
+
+ let notes_path = datastore.group_notes_path(ns, group.as_ref());
+ let comment = file_read_firstline(notes_path).ok();
+
+ let item = GroupListItem {
+ backup: group.into(),
+ last_backup: last_backup.backup_dir.backup_time(),
+ owner: Some(owner),
+ backup_count,
+ files: last_backup.files,
+ comment,
+ };
+
+ Some(item)
}
#[api(
--
2.47.3
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
next prev parent reply other threads:[~2025-10-08 13:44 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-08 13:43 [pbs-devel] [PATCH proxmox{, -backup} v2 0/7] introduce streaming content api call Dominik Csapak
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox v2 1/1] pbs-api-types: add api types for " Dominik Csapak
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox-backup v2 1/6] backup: hierarchy: add new can_access_any_namespace_below helper Dominik Csapak
2025-10-08 20:57 ` [pbs-devel] applied: " Thomas Lamprecht
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox-backup v2 2/6] backup: hierarchy: reuse 'NS_PRIVS_OK' for namespace helper Dominik Csapak
2025-10-08 20:57 ` [pbs-devel] applied: " Thomas Lamprecht
2025-10-08 13:43 ` Dominik Csapak [this message]
2025-10-08 20:57 ` [pbs-devel] applied: [PATCH proxmox-backup v2 3/6] api: admin: datastore: refactor BackupGroup to GroupListItem conversion Thomas Lamprecht
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox-backup v2 4/6] api: admin: datastore: factor out 'get_group_owner' Dominik Csapak
2025-10-08 20:57 ` [pbs-devel] applied: " Thomas Lamprecht
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox-backup v2 5/6] api: admin: datastore: optimize `groups` api call Dominik Csapak
2025-10-08 20:57 ` [pbs-devel] applied: " Thomas Lamprecht
2025-10-08 13:43 ` [pbs-devel] [PATCH proxmox-backup v2 6/6] api: admin: datastore: implement streaming content " Dominik Csapak
2025-10-08 19:49 ` Thomas Lamprecht
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=20251008134344.3512958-5-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox