From 25aa1401746f9cd85c3473b272d21fc6b1c7b35a Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Sun, 22 Mar 2026 23:55:26 -0600 Subject: [PATCH] fix: backup status reporting --- container-runtime/package-lock.json | 2 +- core/src/service/mod.rs | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/container-runtime/package-lock.json b/container-runtime/package-lock.json index 31478b8f4..7814fa09b 100644 --- a/container-runtime/package-lock.json +++ b/container-runtime/package-lock.json @@ -37,7 +37,7 @@ }, "../sdk/dist": { "name": "@start9labs/start-sdk", - "version": "0.4.0-beta.62", + "version": "0.4.0-beta.64", "license": "MIT", "dependencies": { "@iarna/toml": "^3.0.0", diff --git a/core/src/service/mod.rs b/core/src/service/mod.rs index 9fbcfa300..b11e81859 100644 --- a/core/src/service/mod.rs +++ b/core/src/service/mod.rs @@ -673,16 +673,8 @@ impl Service { #[instrument(skip_all)] pub async fn backup(&self, guard: impl GenericMountGuard) -> Result<(), Error> { let id = &self.seed.id; - let mut file = - AtomicFile::new(guard.path().join(id).with_extension("s9pk"), None::<&str>).await?; - self.seed - .persistent_container - .s9pk - .clone() - .serialize(&mut *file, true) - .await?; - file.save().await?; - // TODO: reverify? + // Prepare the backup future in the actor first, so the cell is + // populated before the actor reacts to the DesiredStatus change. let backup = self .actor .send( @@ -692,6 +684,8 @@ impl Service { }, ) .await??; + // Set status early so the UI reflects "backing up" while the s9pk + // serialization and service stop happen concurrently. self.seed .ctx .db @@ -706,6 +700,15 @@ impl Service { }) .await .result?; + let mut file = + AtomicFile::new(guard.path().join(id).with_extension("s9pk"), None::<&str>).await?; + self.seed + .persistent_container + .s9pk + .clone() + .serialize(&mut *file, true) + .await?; + file.save().await?; backup.await }