diff --git a/compute_tools/src/bin/compute_ctl.rs b/compute_tools/src/bin/compute_ctl.rs index ad747470c2..9284daf132 100644 --- a/compute_tools/src/bin/compute_ctl.rs +++ b/compute_tools/src/bin/compute_ctl.rs @@ -294,6 +294,14 @@ fn main() -> Result<()> { info!("synced safekeepers at lsn {lsn}"); } + // Change status to GracefulShutdown + { + let mut state = compute.state.lock().unwrap(); + if matches!(state.status, ComputeStatus::Running) { + state.status = ComputeStatus::GracefulShutdown; + } + } + if let Err(err) = compute.check_for_core_dumps() { error!("error while checking for core dumps: {err:?}"); } diff --git a/control_plane/src/endpoint.rs b/control_plane/src/endpoint.rs index 6060799458..accc385d8c 100644 --- a/control_plane/src/endpoint.rs +++ b/control_plane/src/endpoint.rs @@ -568,6 +568,7 @@ impl Endpoint { } ComputeStatus::Empty | ComputeStatus::ConfigurationPending + | ComputeStatus::GracefulShutdown | ComputeStatus::Configuration => { bail!("unexpected compute status: {:?}", state.status) } diff --git a/libs/compute_api/src/responses.rs b/libs/compute_api/src/responses.rs index 9522d7138f..9289012cc4 100644 --- a/libs/compute_api/src/responses.rs +++ b/libs/compute_api/src/responses.rs @@ -52,6 +52,10 @@ pub enum ComputeStatus { // compute will exit soon or is waiting for // control-plane to terminate it. Failed, + // Wrapping up without blocking the next compute + // start, which might be scheduled on a different + // compute node + GracefulShutdown, } fn rfc3339_serialize(x: &Option>, s: S) -> Result