From c9e7147f84ab80df14ee49432c55583af5e8ea2e Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Mon, 19 Oct 2026 17:56:49 -0700 Subject: [PATCH] fix(managed-server): keep the tunnel manager under its line limit after #30888 and #30891 crossed (#30933) The build's same-pairing check moves next to managedTunnelAccess, which it already wraps. --- .../lifecycle/orcad-managed-tunnel-active.ts | 14 +++++++++++++ .../lifecycle/orcad-managed-tunnel-manager.ts | 20 +++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts index 8d55e8e7444..bdbd1a96616 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-active.ts @@ -54,6 +54,20 @@ export function managedTunnelAccess( : null } +/** The build's environment is still the same pairing, with an SSH tunnel it may use. */ +export function managedTunnelStillPaired( + built: KnownRuntimeEnvironment, + current: KnownRuntimeEnvironment | null, + target: SshTarget | null | undefined, + expected: ManagedTunnelExpectation +): boolean { + return ( + current?.runtimeId === built.runtimeId && + (current.pairingRevision ?? current.createdAt) === (built.pairingRevision ?? built.createdAt) && + managedTunnelAccess(current, target, expected) !== null + ) +} + /** The SSH target and transport a managed environment's tunnel must use, or why it cannot. */ export function resolveManagedTunnelBinding( environment: KnownRuntimeEnvironment, diff --git a/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts b/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts index 0f0bcd29134..dc7b221bc74 100644 --- a/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts +++ b/src/main/managed-server/lifecycle/orcad-managed-tunnel-manager.ts @@ -22,7 +22,7 @@ import type { OrcadManagedServing } from './orcad-managed-serving' import { activeTunnelMatches, dropActiveOrcadTunnel, - managedTunnelAccess, + managedTunnelStillPaired, recordActiveOrcadTunnel, resolveManagedTunnelBinding, supersededTunnelError, @@ -260,17 +260,15 @@ export class OrcadManagedTunnelManager { const managerGeneration = this.managerGeneration const ownershipGeneration = this.ownershipGenerations.get(environment.id) ?? 0 const expected = { environmentId: environment.id, ...deployment } - const stillOwned = (): boolean => { - const currentEnvironment = resolveCurrent() - return ( - this.managerGeneration === managerGeneration && - (this.ownershipGenerations.get(environment.id) ?? 0) === ownershipGeneration && - currentEnvironment?.runtimeId === environment.runtimeId && - (currentEnvironment.pairingRevision ?? currentEnvironment.createdAt) === - (environment.pairingRevision ?? environment.createdAt) && - managedTunnelAccess(currentEnvironment, targetStore.getTarget(target.id), expected) !== null + const stillOwned = (): boolean => + this.managerGeneration === managerGeneration && + (this.ownershipGenerations.get(environment.id) ?? 0) === ownershipGeneration && + managedTunnelStillPaired( + environment, + resolveCurrent(), + targetStore.getTarget(target.id), + expected ) - } const connection = await connectionManager.connect(target) if (!stillOwned()) { throw supersededTunnelError()