From c4eaed5429b8dfe155955c0dc65632912578e4ea Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 18 Mar 2026 12:05:29 -0700 Subject: [PATCH] fix shutdown to send deregister heartbeat before pre_stop delay Go's StopHeartbeat() closes stopChan immediately on interrupt, causing the heartbeat goroutine to send the deregister heartbeat right away, before the preStopSeconds delay. Rust was only setting is_stopping=true without waking the heartbeat loop, so the deregister was delayed until after the pre_stop sleep. Now we call volume_state_notify.notify_one() to wake the heartbeat immediately. --- seaweed-volume/src/main.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/seaweed-volume/src/main.rs b/seaweed-volume/src/main.rs index ccf92fdcc..a398dbf66 100644 --- a/seaweed-volume/src/main.rs +++ b/seaweed-volume/src/main.rs @@ -486,6 +486,10 @@ async fn run( info!("Received shutdown signal..."); } *state_shutdown.is_stopping.write().unwrap() = true; + // Wake heartbeat loop immediately so it sends deregister heartbeat + // before the pre_stop delay (matches Go: StopHeartbeat() closes stopChan + // before sleeping preStopSeconds) + state_shutdown.volume_state_notify.notify_one(); // Graceful drain: wait pre_stop_seconds before shutting down servers let pre_stop = state_shutdown.pre_stop_seconds;