From 306f7ea4598f5b8bde42ce5701b1355246fbc792 Mon Sep 17 00:00:00 2001 From: Dotta Date: Fri, 30 Oct 2026 23:07:34 -0500 Subject: [PATCH] chore: clarify maintenance scheduling after interval removal Co-Authored-By: Paperclip --- server/src/index.ts | 6 ------ server/src/services/decision-target-work.ts | 5 +++-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 7ceed95cb9f..63e1e5d6809 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1786,12 +1786,6 @@ async function startServerWithDatabaseTeardown( if (config.heartbeatSchedulerEnabled) await heartbeat.registerStoppedInstructionCollectionWork(deliveryWork, () => !isIdleTaskDrainActive() && !heartbeatSchedulerStopped && !isWarmStandby()).ready; - // Startup housekeeping: provider and connection sweeps that every timer tick - // repeats and that neither serving requests nor run recovery depends on. - // Readiness does not wait for it. It is tracked as scheduler work, so idle - // sleep and shutdown wait for it. Each step logs its own failure and the - // next step still runs. The scheduler interval starts after it, so the login - // reapers and the lease cleanup still finish before the first timer tick. const runStartupHousekeeping = async () => { const step = (name: string, work: () => Promise) => work().catch((err: unknown) => { diff --git a/server/src/services/decision-target-work.ts b/server/src/services/decision-target-work.ts index 0a285fa86ec..b26e658a3b3 100644 --- a/server/src/services/decision-target-work.ts +++ b/server/src/services/decision-target-work.ts @@ -7,12 +7,13 @@ export function registerDecisionTargetWork( service: Pick, "sweepInvalidTargets" | "decisionTargetsChanged" | "hasDecisionTargetWork">, canRun: () => boolean, ) { + const retryMs = 30_000; return coordinator.register(DELIVERY_QUEUES.decisionTargets, { - retryMs: 30_000, + retryMs, pausePassiveMaintenance: true, onSettled: service.decisionTargetsChanged, run: signal => canRun() ? service.sweepInvalidTargets(new Date(), signal) : Promise.resolve(), hasPending: async () => canRun() && service.hasDecisionTargetWork(), - nextRunAt: () => service.hasDecisionTargetWork() ? Date.now() + 30_000 : null, + nextRunAt: () => service.hasDecisionTargetWork() ? Date.now() + retryMs : null, }); }