From ee6ff936ffbc7a9d025029d26eabe57ee7f4fa3f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 16 Jul 2026 00:52:42 -0700 Subject: [PATCH] refactor(diagnostics): unify recovery requests (#108736) --- src/logging/diagnostic.ts | 59 ++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/src/logging/diagnostic.ts b/src/logging/diagnostic.ts index 03515c02e7a7..87d91271d68d 100644 --- a/src/logging/diagnostic.ts +++ b/src/logging/diagnostic.ts @@ -1332,47 +1332,36 @@ export function startDiagnosticHeartbeat( thresholdMs: stuckSessionWarnMs, abortThresholdMs: stuckSessionAbortMs, }); - if (classification?.recoveryEligible && !shouldDeferRecovery) { - requestStuckSessionRecovery({ - recover: opts?.recoverStuckSession ?? recoverStuckSession, - classification, - request: { - sessionId: state.sessionId, - sessionKey: state.sessionKey, - sessionFile: state.sessionFile, - ageMs: attentionAgeMs, - queueDepth: state.queueDepth, - expectedState: state.state, - stateGeneration: state.generation, - staleActiveProgressAbortMs: stuckSessionAbortMs, - compactionSafetyTimeoutMs, - }, - }); - } else if ( - classification && - !shouldDeferRecovery && + if (!classification || shouldDeferRecovery) { + continue; + } + const activeAbortEligible = + !classification.recoveryEligible && isActiveAbortRecoveryEligible({ classification, activity, stuckSessionAbortMs, - }) - ) { - requestStuckSessionRecovery({ - recover: opts?.recoverStuckSession ?? recoverStuckSession, - classification, - request: { - sessionId: state.sessionId, - sessionKey: state.sessionKey, - sessionFile: state.sessionFile, - ageMs: attentionAgeMs, - queueDepth: state.queueDepth, - allowActiveAbort: true, - expectedState: state.state, - stateGeneration: state.generation, - compactionSafetyTimeoutMs, - }, }); + if (!classification.recoveryEligible && !activeAbortEligible) { + continue; } + requestStuckSessionRecovery({ + recover: opts?.recoverStuckSession ?? recoverStuckSession, + classification, + request: { + sessionId: state.sessionId, + sessionKey: state.sessionKey, + sessionFile: state.sessionFile, + ageMs: attentionAgeMs, + queueDepth: state.queueDepth, + expectedState: state.state, + stateGeneration: state.generation, + ...(activeAbortEligible + ? { allowActiveAbort: true } + : { staleActiveProgressAbortMs: stuckSessionAbortMs }), + compactionSafetyTimeoutMs, + }, + }); } } }, DIAGNOSTIC_HEARTBEAT_INTERVAL_MS);