From f0eea9867b43e56bca6941d44204864d4d1f0588 Mon Sep 17 00:00:00 2001 From: Julian Sommer <115516918+juliansommer@users.noreply.github.com> Date: Wed, 6 May 2026 13:45:35 +1000 Subject: [PATCH] fix: cleanup instanceUp subscription if getConsoleOutput subscription fails --- spinifex/daemon/vm_adapters.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spinifex/daemon/vm_adapters.go b/spinifex/daemon/vm_adapters.go index 953b94d70..ad1563da8 100644 --- a/spinifex/daemon/vm_adapters.go +++ b/spinifex/daemon/vm_adapters.go @@ -361,6 +361,14 @@ func (d *Daemon) onInstanceUpHook() func(*vm.VM) error { d.handleEC2GetConsoleOutput, ) if err != nil { + // Roll back the first sub so the instance doesn't end up Running with + // one of two per-instance topics live — leaving GetConsoleOutput + // unreachable while Stop / Terminate continue to work. + if unsubErr := sub.Unsubscribe(); unsubErr != nil { + slog.Warn("OnInstanceUp: failed to unsubscribe command topic during rollback", + "instanceId", instance.ID, "err", unsubErr) + } + delete(d.natsSubscriptions, instance.ID) slog.Error("OnInstanceUp: failed to subscribe to console output topic", "instanceId", instance.ID, "err", err) return fmt.Errorf("subscribe ec2.%s.GetConsoleOutput: %w", instance.ID, err)