From ecf2f2c35f5f644b9781cd995d414af78e9d4d3b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 17 Mar 2026 14:36:39 -0700 Subject: [PATCH] Match Go DeleteVolumeNeedle: check noWriteOrDelete before allowing delete Go checks v.noWriteOrDelete before proceeding with needle deletion, returning "volume is read only" if true. Rust was skipping this check. --- seaweed-volume/src/storage/store.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/seaweed-volume/src/storage/store.rs b/seaweed-volume/src/storage/store.rs index ec10ce389..8f99ebb3d 100644 --- a/seaweed-volume/src/storage/store.rs +++ b/seaweed-volume/src/storage/store.rs @@ -383,6 +383,12 @@ impl Store { vid: VolumeId, n: &mut Needle, ) -> Result { + // Match Go's DeleteVolumeNeedle: check noWriteOrDelete before proceeding. + let (_, vol) = self.find_volume(vid).ok_or(VolumeError::NotFound)?; + if vol.is_no_write_or_delete() { + return Err(VolumeError::ReadOnly); + } + let (_, vol) = self.find_volume_mut(vid).ok_or(VolumeError::NotFound)?; vol.delete_needle(n) }