volume-rust: retry failed vid stamp saves, mirroring Go

This commit is contained in:
Chris Lu
2026-10-18 21:07:32 -07:00
parent c03ef79310
commit 623965d1d9
2 changed files with 11 additions and 3 deletions
+2
View File
@@ -75,6 +75,7 @@ pub struct Store {
pub max_volume_id_seen: AtomicU32,
pub last_seen_topology_id: Mutex<String>,
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),
}
}
+9 -3
View File
@@ -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);
}
}