From 56ab13f0e261b6e20185c4970c3065ac636d1922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 20 Nov 2024 17:47:21 +0100 Subject: [PATCH] push: fix remove_vanished namespaces logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit a vanished namespace is one that - exists on the target side, below the target prefix - but within the specified max_depth - and was not part of the synced namespaces Co-developed-by: Christian Ebner Signed-off-by: Fabian Grünbichler --- src/server/push.rs | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/server/push.rs b/src/server/push.rs index f23524ea..5d537605 100644 --- a/src/server/push.rs +++ b/src/server/push.rs @@ -405,33 +405,30 @@ pub(crate) async fn push_store(mut params: PushParameters) -> Result = existing_target_namespaces + .into_iter() + .filter(|target_namespace| { + params + .target + .ns + .contains(&target_namespace) + .map(|sub_depth| sub_depth <= max_depth) + .unwrap_or(false) + }) + .collect(); // Sort by namespace length and revert for sub-namespaces to be removed before parents target_sub_namespaces.sort_unstable_by_key(|a| a.name_len()); target_sub_namespaces.reverse(); for target_namespace in target_sub_namespaces { - if synced_namespaces.contains(target_namespace) { + if synced_namespaces.contains(&target_namespace) { continue; } - match remove_target_namespace(¶ms, target_namespace).await { + match remove_target_namespace(¶ms, &target_namespace).await { Ok(delete_stats) => { stats.add(SyncStats::from(RemovedVanishedStats { snapshots: delete_stats.removed_snapshots(),