replace deprecated list_backup_group from BackupInfo with Datastore one
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
c90dbb5c7b
commit
7d9cb8c458
|
@ -166,66 +166,66 @@ pub fn list_groups(
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
||||||
let list_all = (user_privs & PRIV_DATASTORE_AUDIT) != 0;
|
let list_all = (user_privs & PRIV_DATASTORE_AUDIT) != 0;
|
||||||
|
|
||||||
let backup_groups = BackupInfo::list_backup_groups(&datastore.base_path())?;
|
let group_info =
|
||||||
|
datastore
|
||||||
let group_info = backup_groups
|
.list_backup_groups()?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.fold(Vec::new(), |mut group_info, group| {
|
.fold(Vec::new(), |mut group_info, group| {
|
||||||
let owner = match datastore.get_owner(&group) {
|
let owner = match datastore.get_owner(&group) {
|
||||||
Ok(auth_id) => auth_id,
|
Ok(auth_id) => auth_id,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"Failed to get owner of group '{}/{}' - {}",
|
"Failed to get owner of group '{}/{}' - {}",
|
||||||
&store, group, err
|
&store, group, err
|
||||||
);
|
);
|
||||||
return group_info;
|
return group_info;
|
||||||
}
|
|
||||||
};
|
|
||||||
if !list_all && check_backup_owner(&owner, &auth_id).is_err() {
|
|
||||||
return group_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
let snapshots = match group.list_backups(&datastore.base_path()) {
|
|
||||||
Ok(snapshots) => snapshots,
|
|
||||||
Err(_) => {
|
|
||||||
return group_info;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let backup_count: u64 = snapshots.len() as u64;
|
|
||||||
if backup_count == 0 {
|
|
||||||
return group_info;
|
|
||||||
}
|
|
||||||
|
|
||||||
let last_backup = snapshots
|
|
||||||
.iter()
|
|
||||||
.fold(&snapshots[0], |last, curr| {
|
|
||||||
if curr.is_finished()
|
|
||||||
&& curr.backup_dir.backup_time() > last.backup_dir.backup_time()
|
|
||||||
{
|
|
||||||
curr
|
|
||||||
} else {
|
|
||||||
last
|
|
||||||
}
|
}
|
||||||
})
|
};
|
||||||
.to_owned();
|
if !list_all && check_backup_owner(&owner, &auth_id).is_err() {
|
||||||
|
return group_info;
|
||||||
|
}
|
||||||
|
|
||||||
let note_path = get_group_note_path(&datastore, &group);
|
let snapshots = match group.list_backups(&datastore.base_path()) {
|
||||||
let comment = file_read_firstline(¬e_path).ok();
|
Ok(snapshots) => snapshots,
|
||||||
|
Err(_) => {
|
||||||
|
return group_info;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
group_info.push(GroupListItem {
|
let backup_count: u64 = snapshots.len() as u64;
|
||||||
backup_type: group.backup_type().to_string(),
|
if backup_count == 0 {
|
||||||
backup_id: group.backup_id().to_string(),
|
return group_info;
|
||||||
last_backup: last_backup.backup_dir.backup_time(),
|
}
|
||||||
owner: Some(owner),
|
|
||||||
backup_count,
|
let last_backup = snapshots
|
||||||
files: last_backup.files,
|
.iter()
|
||||||
comment,
|
.fold(&snapshots[0], |last, curr| {
|
||||||
|
if curr.is_finished()
|
||||||
|
&& curr.backup_dir.backup_time() > last.backup_dir.backup_time()
|
||||||
|
{
|
||||||
|
curr
|
||||||
|
} else {
|
||||||
|
last
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.to_owned();
|
||||||
|
|
||||||
|
let note_path = get_group_note_path(&datastore, &group);
|
||||||
|
let comment = file_read_firstline(¬e_path).ok();
|
||||||
|
|
||||||
|
group_info.push(GroupListItem {
|
||||||
|
backup_type: group.backup_type().to_string(),
|
||||||
|
backup_id: group.backup_id().to_string(),
|
||||||
|
last_backup: last_backup.backup_dir.backup_time(),
|
||||||
|
owner: Some(owner),
|
||||||
|
backup_count,
|
||||||
|
files: last_backup.files,
|
||||||
|
comment,
|
||||||
|
});
|
||||||
|
|
||||||
|
group_info
|
||||||
});
|
});
|
||||||
|
|
||||||
group_info
|
|
||||||
});
|
|
||||||
|
|
||||||
Ok(group_info)
|
Ok(group_info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,30 +417,30 @@ pub fn list_snapshots(
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
||||||
|
|
||||||
let base_path = datastore.base_path();
|
|
||||||
|
|
||||||
let groups = match (backup_type, backup_id) {
|
let groups = match (backup_type, backup_id) {
|
||||||
(Some(backup_type), Some(backup_id)) => {
|
(Some(backup_type), Some(backup_id)) => {
|
||||||
let mut groups = Vec::with_capacity(1);
|
let mut groups = Vec::with_capacity(1);
|
||||||
groups.push(BackupGroup::new(backup_type, backup_id));
|
groups.push(BackupGroup::new(backup_type, backup_id));
|
||||||
groups
|
groups
|
||||||
}
|
}
|
||||||
(Some(backup_type), None) => BackupInfo::list_backup_groups(&base_path)?
|
(Some(backup_type), None) => datastore
|
||||||
|
.list_backup_groups()?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|group| group.backup_type() == backup_type)
|
.filter(|group| group.backup_type() == backup_type)
|
||||||
.collect(),
|
.collect(),
|
||||||
(None, Some(backup_id)) => BackupInfo::list_backup_groups(&base_path)?
|
(None, Some(backup_id)) => datastore
|
||||||
|
.list_backup_groups()?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|group| group.backup_id() == backup_id)
|
.filter(|group| group.backup_id() == backup_id)
|
||||||
.collect(),
|
.collect(),
|
||||||
_ => BackupInfo::list_backup_groups(&base_path)?,
|
_ => datastore.list_backup_groups()?,
|
||||||
};
|
};
|
||||||
|
|
||||||
let info_to_snapshot_list_item = |group: &BackupGroup, owner, info: BackupInfo| {
|
let info_to_snapshot_list_item = |group: &BackupGroup, owner, info: BackupInfo| {
|
||||||
let backup_type = group.backup_type().to_string();
|
let backup_type = group.backup_type().to_string();
|
||||||
let backup_id = group.backup_id().to_string();
|
let backup_id = group.backup_id().to_string();
|
||||||
let backup_time = info.backup_dir.backup_time();
|
let backup_time = info.backup_dir.backup_time();
|
||||||
let protected = info.backup_dir.is_protected(base_path.clone());
|
let protected = info.backup_dir.is_protected(datastore.base_path());
|
||||||
|
|
||||||
match get_all_snapshot_files(&datastore, &info) {
|
match get_all_snapshot_files(&datastore, &info) {
|
||||||
Ok((manifest, files)) => {
|
Ok((manifest, files)) => {
|
||||||
|
@ -540,11 +540,9 @@ pub fn list_snapshots(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_snapshots_count(store: &DataStore, filter_owner: Option<&Authid>) -> Result<Counts, Error> {
|
fn get_snapshots_count(store: &DataStore, filter_owner: Option<&Authid>) -> Result<Counts, Error> {
|
||||||
let base_path = store.base_path();
|
store
|
||||||
let groups = BackupInfo::list_backup_groups(&base_path)?;
|
.list_backup_groups()?
|
||||||
|
.into_iter()
|
||||||
groups
|
|
||||||
.iter()
|
|
||||||
.filter(|group| {
|
.filter(|group| {
|
||||||
let owner = match store.get_owner(group) {
|
let owner = match store.get_owner(group) {
|
||||||
Ok(owner) => owner,
|
Ok(owner) => owner,
|
||||||
|
@ -565,7 +563,7 @@ fn get_snapshots_count(store: &DataStore, filter_owner: Option<&Authid>) -> Resu
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.try_fold(Counts::default(), |mut counts, group| {
|
.try_fold(Counts::default(), |mut counts, group| {
|
||||||
let snapshot_count = group.list_backups(&base_path)?.len() as u64;
|
let snapshot_count = group.list_backups(&store.base_path())?.len() as u64;
|
||||||
|
|
||||||
// only include groups with snapshots (avoid confusing users
|
// only include groups with snapshots (avoid confusing users
|
||||||
// by counting/displaying emtpy groups)
|
// by counting/displaying emtpy groups)
|
||||||
|
|
|
@ -408,7 +408,7 @@ fn backup_worker(
|
||||||
|
|
||||||
let mut pool_writer = PoolWriter::new(pool, &setup.drive, worker, email, force_media_set)?;
|
let mut pool_writer = PoolWriter::new(pool, &setup.drive, worker, email, force_media_set)?;
|
||||||
|
|
||||||
let mut group_list = BackupInfo::list_backup_groups(&datastore.base_path())?;
|
let mut group_list = datastore.list_backup_groups()?;
|
||||||
|
|
||||||
group_list.sort_unstable();
|
group_list.sort_unstable();
|
||||||
|
|
||||||
|
|
|
@ -537,7 +537,7 @@ pub fn verify_all_backups(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut list = match BackupInfo::list_backup_groups(&verify_worker.datastore.base_path()) {
|
let mut list = match verify_worker.datastore.list_backup_groups() {
|
||||||
Ok(list) => list
|
Ok(list) => list
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|group| !(group.backup_type() == "host" && group.backup_id() == "benchmark"))
|
.filter(|group| !(group.backup_type() == "host" && group.backup_id() == "benchmark"))
|
||||||
|
|
|
@ -6,7 +6,6 @@ use proxmox_sys::{task_log, task_warn};
|
||||||
|
|
||||||
use pbs_api_types::{Authid, Operation, PruneOptions, PRIV_DATASTORE_MODIFY};
|
use pbs_api_types::{Authid, Operation, PruneOptions, PRIV_DATASTORE_MODIFY};
|
||||||
use pbs_config::CachedUserInfo;
|
use pbs_config::CachedUserInfo;
|
||||||
use pbs_datastore::backup_info::BackupInfo;
|
|
||||||
use pbs_datastore::prune::compute_prune_info;
|
use pbs_datastore::prune::compute_prune_info;
|
||||||
use pbs_datastore::DataStore;
|
use pbs_datastore::DataStore;
|
||||||
use proxmox_rest_server::WorkerTask;
|
use proxmox_rest_server::WorkerTask;
|
||||||
|
@ -43,11 +42,8 @@ pub fn prune_datastore(
|
||||||
let privs = user_info.lookup_privs(&auth_id, &["datastore", store]);
|
let privs = user_info.lookup_privs(&auth_id, &["datastore", store]);
|
||||||
let has_privs = privs & PRIV_DATASTORE_MODIFY != 0;
|
let has_privs = privs & PRIV_DATASTORE_MODIFY != 0;
|
||||||
|
|
||||||
let base_path = datastore.base_path();
|
for group in datastore.list_backup_groups()? {
|
||||||
|
let list = group.list_backups(&datastore.base_path())?;
|
||||||
let groups = BackupInfo::list_backup_groups(&base_path)?;
|
|
||||||
for group in groups {
|
|
||||||
let list = group.list_backups(&base_path)?;
|
|
||||||
|
|
||||||
if !has_privs && !datastore.owns_backup(&group, &auth_id)? {
|
if !has_privs && !datastore.owns_backup(&group, &auth_id)? {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -28,7 +28,7 @@ use pbs_datastore::index::IndexFile;
|
||||||
use pbs_datastore::manifest::{
|
use pbs_datastore::manifest::{
|
||||||
archive_type, ArchiveType, BackupManifest, FileInfo, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME,
|
archive_type, ArchiveType, BackupManifest, FileInfo, CLIENT_LOG_BLOB_NAME, MANIFEST_BLOB_NAME,
|
||||||
};
|
};
|
||||||
use pbs_datastore::{BackupDir, BackupGroup, BackupInfo, DataStore, StoreProgress};
|
use pbs_datastore::{BackupDir, BackupGroup, DataStore, StoreProgress};
|
||||||
use pbs_tools::sha::sha256;
|
use pbs_tools::sha::sha256;
|
||||||
use proxmox_rest_server::WorkerTask;
|
use proxmox_rest_server::WorkerTask;
|
||||||
|
|
||||||
|
@ -797,8 +797,7 @@ pub async fn pull_store(
|
||||||
|
|
||||||
if params.remove_vanished {
|
if params.remove_vanished {
|
||||||
let result: Result<(), Error> = proxmox_lang::try_block!({
|
let result: Result<(), Error> = proxmox_lang::try_block!({
|
||||||
let local_groups = BackupInfo::list_backup_groups(¶ms.store.base_path())?;
|
for local_group in params.store.list_backup_groups()? {
|
||||||
for local_group in local_groups {
|
|
||||||
if new_groups.contains(&local_group) {
|
if new_groups.contains(&local_group) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue