From 623965d1d9f4eac272c317a2faedf082ad2f9e54 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 18 Oct 2026 21:07:32 -0700 Subject: [PATCH] volume-rust: retry failed vid stamp saves, mirroring Go --- seaweed-volume/src/storage/store.rs | 2 ++ seaweed-volume/src/storage/vid_stamp.rs | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/seaweed-volume/src/storage/store.rs b/seaweed-volume/src/storage/store.rs index d70c3e24c6..b6c3a99a7e 100644 --- a/seaweed-volume/src/storage/store.rs +++ b/seaweed-volume/src/storage/store.rs @@ -75,6 +75,7 @@ pub struct Store { pub max_volume_id_seen: AtomicU32, pub last_seen_topology_id: Mutex, pub vid_stamp_lock: Mutex<()>, + pub vid_stamp_dirty: std::sync::atomic::AtomicBool, } impl Store { @@ -97,6 +98,7 @@ impl Store { max_volume_id_seen: AtomicU32::new(0), last_seen_topology_id: Mutex::new(String::new()), vid_stamp_lock: Mutex::new(()), + vid_stamp_dirty: std::sync::atomic::AtomicBool::new(false), } } diff --git a/seaweed-volume/src/storage/vid_stamp.rs b/seaweed-volume/src/storage/vid_stamp.rs index 27ef8a289b..091b5bb2ea 100644 --- a/seaweed-volume/src/storage/vid_stamp.rs +++ b/seaweed-volume/src/storage/vid_stamp.rs @@ -41,9 +41,11 @@ impl Store { } pub fn update_max_volume_id_seen(&self, vid: u32) { - self.max_volume_id_seen - .fetch_max(vid, std::sync::atomic::Ordering::Relaxed); - self.save_vid_stamps(); + use std::sync::atomic::Ordering::Relaxed; + let prev = self.max_volume_id_seen.fetch_max(vid, Relaxed); + if vid > prev || self.vid_stamp_dirty.load(Relaxed) { + self.save_vid_stamps(); + } } pub fn update_last_seen_topology_id(&self, id: &str) { @@ -91,11 +93,15 @@ impl Store { Ok(s) => s, Err(_) => return, }; + let mut failed = false; for loc in &self.locations { if let Err(e) = write_vid_stamp(Path::new(&loc.directory), &stamp) { tracing::warn!("write vid stamp in {}: {}", loc.directory, e); + failed = true; } } + self.vid_stamp_dirty + .store(failed, std::sync::atomic::Ordering::Relaxed); } }