From c425bdc9b295a001e1846471d63f3807ba32d86a Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 23 Jan 2020 09:58:57 +0100 Subject: [PATCH] src/api2/pull.rs: delete fanished snapshots --- src/api2/pull.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/api2/pull.rs b/src/api2/pull.rs index 0c70ad51..2a8ffe26 100644 --- a/src/api2/pull.rs +++ b/src/api2/pull.rs @@ -259,8 +259,12 @@ pub async fn pull_group( let last_sync = tgt_store.last_successful_backup(group)?; + let mut remote_snapshots = std::collections::HashSet::new(); + for item in list { let backup_time = Utc.timestamp(item.backup_time, 0); + remote_snapshots.insert(backup_time); + if let Some(last_sync_time) = last_sync { if last_sync_time > backup_time { continue; } } @@ -287,7 +291,13 @@ pub async fn pull_group( } if delete { - // fixme: implement me + let local_list = group.list_backups(&tgt_store.base_path())?; + for info in local_list { + let backup_time = info.backup_dir.backup_time(); + if remote_snapshots.contains(&backup_time) { continue; } + worker.log(format!("delete vanished snapshot {:?}", info.backup_dir.relative_path())); + tgt_store.remove_backup_dir(&info.backup_dir)?; + } } Ok(()) @@ -337,7 +347,7 @@ pub async fn pull_store( if new_groups.contains(&local_group) { continue; } worker.log(format!("delete vanished group '{}/{}'", local_group.backup_type(), local_group.backup_id())); if let Err(err) = tgt_store.remove_backup_group(&local_group) { - worker.log(format!("delete failed: {}", err)); + worker.log(err.to_string()); errors = true; } }