fix(ecstore): retain source-set lock during cleanup

This commit is contained in:
overtrue
2026-08-22 01:34:10 +08:00
parent dfcb0ae706
commit caa7eeac0b
2 changed files with 107 additions and 2 deletions
+3 -2
View File
@@ -1745,9 +1745,10 @@ impl ECStore {
#[cfg(test)]
crate::data_movement::notify_source_cleanup_mutation_fence_pending(bucket, object);
let object = encode_dir_object(object);
let distributed = self.ctx.is_dist_erasure().await;
let fixed_set = Arc::clone(&self.pools[0].disk_set[0]);
let source_lock_covered = !distributed || same_distributed_lock_domain(&fixed_set.lockers, &source_set.lockers);
// SetDisks namespaces include pool/set identity, so only the canonical
// fixed set is covered by the fixed mutation guard.
let source_lock_covered = std::ptr::eq(fixed_set.as_ref(), source_set);
// Lock order: fixed store mutation domain first; source cleanup takes its
// hashed source-domain lock second only when this guard does not cover it.
let guard = self