From af464e27f44362f119fe6d7de3ebb6cc21172948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?m=C3=BCde?= Date: Thu, 14 May 2026 22:13:00 +0200 Subject: [PATCH] rebuild re-registers agent; preserve /run/hyperhive across restarts --- hive-c0re/src/coordinator.rs | 3 +++ hive-c0re/src/server.rs | 2 +- nix/modules/hive-c0re.nix | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hive-c0re/src/coordinator.rs b/hive-c0re/src/coordinator.rs index 66d8b7d..105e92a 100644 --- a/hive-c0re/src/coordinator.rs +++ b/hive-c0re/src/coordinator.rs @@ -26,6 +26,9 @@ impl Coordinator { } pub async fn register_agent(&self, name: &str) -> Result { + // Idempotent: drop any existing listener so re-registration (e.g. on rebuild, + // or after a hive-c0re restart cleared /run/hyperhive) gets a fresh socket. + self.unregister_agent(name); let agent_dir = Self::agent_dir(name); std::fs::create_dir_all(&agent_dir) .with_context(|| format!("create agent dir {}", agent_dir.display()))?; diff --git a/hive-c0re/src/server.rs b/hive-c0re/src/server.rs index 487c92f..2e34a9b 100644 --- a/hive-c0re/src/server.rs +++ b/hive-c0re/src/server.rs @@ -77,7 +77,7 @@ async fn dispatch(req: &HostRequest, agent_flake: &str, coord: &Coordinator) -> } HostRequest::Rebuild { name } => { tracing::info!(%name, "rebuild"); - let agent_dir = Coordinator::agent_dir(name); + let agent_dir = coord.register_agent(name).await?; lifecycle::rebuild(name, agent_flake, &agent_dir).await?; HostResponse::success() } diff --git a/nix/modules/hive-c0re.nix b/nix/modules/hive-c0re.nix index ba77825..dc9c383 100644 --- a/nix/modules/hive-c0re.nix +++ b/nix/modules/hive-c0re.nix @@ -37,6 +37,7 @@ in RestartSec = 2; RuntimeDirectory = "hyperhive"; RuntimeDirectoryMode = "0750"; + RuntimeDirectoryPreserve = "yes"; StateDirectory = "hyperhive"; }; };