From 4d54376483be7037a1418b8bab3c187c7d99b49a Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Sat, 28 Mar 2026 23:33:49 -0700 Subject: [PATCH] Tests: stabilize shard-2 queue and channel state --- src/process/command-queue.test.ts | 4 +++- src/process/command-queue.ts | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/process/command-queue.test.ts b/src/process/command-queue.test.ts index 8b6de56a07c..6b873a3f500 100644 --- a/src/process/command-queue.test.ts +++ b/src/process/command-queue.test.ts @@ -29,6 +29,7 @@ let getActiveTaskCount: CommandQueueModule["getActiveTaskCount"]; let getQueueSize: CommandQueueModule["getQueueSize"]; let markGatewayDraining: CommandQueueModule["markGatewayDraining"]; let resetAllLanes: CommandQueueModule["resetAllLanes"]; +let resetCommandQueueStateForTest: CommandQueueModule["resetCommandQueueStateForTest"]; let setCommandLaneConcurrency: CommandQueueModule["setCommandLaneConcurrency"]; let waitForActiveTasks: CommandQueueModule["waitForActiveTasks"]; @@ -67,10 +68,11 @@ describe("command queue", () => { getQueueSize, markGatewayDraining, resetAllLanes, + resetCommandQueueStateForTest, setCommandLaneConcurrency, waitForActiveTasks, } = await import("./command-queue.js")); - resetAllLanes(); + resetCommandQueueStateForTest(); // Queue state is global across module instances, so reset main lane // concurrency explicitly to avoid cross-file leakage. setCommandLaneConcurrency(CommandLane.Main, 1); diff --git a/src/process/command-queue.ts b/src/process/command-queue.ts index 85fec647ea6..b589d109cfb 100644 --- a/src/process/command-queue.ts +++ b/src/process/command-queue.ts @@ -254,6 +254,18 @@ export function clearCommandLane(lane: string = CommandLane.Main) { return removed; } +/** + * Test-only hard reset that discards all queue state, including preserved + * queued work from previous generations. Use this when a suite needs an + * isolated baseline across shared-worker runs. + */ +export function resetCommandQueueStateForTest(): void { + const queueState = getQueueState(); + queueState.gatewayDraining = false; + queueState.lanes.clear(); + queueState.nextTaskId = 1; +} + /** * Reset all lane runtime state to idle. Used after SIGUSR1 in-process * restarts where interrupted tasks' finally blocks may not run, leaving