src/api2/admin/datastore.rs - prune: log info about all snapshots

This commit is contained in:
Dietmar Maurer 2019-12-05 13:13:30 +01:00
parent 02d22dec4d
commit 8f0b4c1f90
3 changed files with 31 additions and 18 deletions

View File

@ -314,7 +314,7 @@ fn prune(
let list = group.list_backups(&datastore.base_path())?; let list = group.list_backups(&datastore.base_path())?;
let remove_list = BackupGroup::compute_prune_list( let mut prune_info = BackupGroup::compute_prune_info(
list, list,
param["keep-last"].as_u64(), param["keep-last"].as_u64(),
param["keep-daily"].as_u64(), param["keep-daily"].as_u64(),
@ -323,10 +323,16 @@ fn prune(
param["keep-yearly"].as_u64(), param["keep-yearly"].as_u64(),
)?; )?;
for info in remove_list { prune_info.reverse(); // delete older snapshots first
worker.log(format!("remove {:?}", info.backup_dir));
for (info, keep) in prune_info {
if keep {
worker.log(format!("keep {:?}", info.backup_dir.relative_path()));
} else {
worker.log(format!("remove {:?}", info.backup_dir.relative_path()));
datastore.remove_backup_dir(&info.backup_dir)?; datastore.remove_backup_dir(&info.backup_dir)?;
} }
}
Ok(()) Ok(())
}; };

View File

@ -128,14 +128,14 @@ impl BackupGroup {
} }
} }
pub fn compute_prune_list( pub fn compute_prune_info(
mut list: Vec<BackupInfo>, mut list: Vec<BackupInfo>,
keep_last: Option<u64>, keep_last: Option<u64>,
keep_daily: Option<u64>, keep_daily: Option<u64>,
keep_weekly: Option<u64>, keep_weekly: Option<u64>,
keep_monthly: Option<u64>, keep_monthly: Option<u64>,
keep_yearly: Option<u64>, keep_yearly: Option<u64>,
) -> Result<Vec<BackupInfo>, Error> { ) -> Result<Vec<(BackupInfo, bool)>, Error> {
let mut mark = HashMap::new(); let mut mark = HashMap::new();
@ -190,19 +190,18 @@ impl BackupGroup {
}); });
} }
let mut remove_list: Vec<BackupInfo> = list.into_iter() let prune_info: Vec<(BackupInfo, bool)> = list.into_iter()
.filter(|info| { .map(|info| {
let backup_id = info.backup_dir.relative_path(); let backup_id = info.backup_dir.relative_path();
match mark.get(&backup_id) { let keep = match mark.get(&backup_id) {
Some(PruneMark::Keep) => false, Some(PruneMark::Keep) => true,
_ => true, _ => false,
} };
(info, keep)
}) })
.collect(); .collect();
BackupInfo::sort_list(&mut remove_list, true); Ok(prune_info)
Ok(remove_list)
} }
} }

View File

@ -14,12 +14,20 @@ fn get_prune_list(
keep_yearly: Option<u64>, keep_yearly: Option<u64>,
) -> Vec<PathBuf> { ) -> Vec<PathBuf> {
let remove_list = BackupGroup::compute_prune_list( let mut prune_info = BackupGroup::compute_prune_info(
list, keep_last, keep_daily, keep_weekly, keep_monthly, keep_yearly).unwrap(); list, keep_last, keep_daily, keep_weekly, keep_monthly, keep_yearly).unwrap();
remove_list prune_info.reverse();
prune_info
.iter() .iter()
.map(|d| d.backup_dir.relative_path()) .filter_map(|(info, keep)| {
if *keep {
None
} else {
Some(info.backup_dir.relative_path())
}
})
.collect() .collect()
} }