Skip to content

Commit 4c3615c

Browse files
committed
test(desktop): release the held Stop only once the result waits on its lock
1 parent f195b3b commit 4c3615c

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

‎apps/sim/lib/desktop/application/executor.integration.ts‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -553,22 +553,31 @@ describe.runIf(Boolean(redisUrl))('desktop background executor protocol', () =>
553553
const { executionToken } = await claim(desktop.principal, desktop.deviceId, toolCallId)
554554

555555
/** Stop closes admission on the run row; hold its transaction open while the result arrives. */
556-
const stopHeld = createDeferred<void>()
556+
const stopHeld = createDeferred<number>()
557557
const releaseStop = createDeferred<void>()
558558
const stopping = db.transaction(async (tx) => {
559559
await tx
560560
.update(copilotRuns)
561561
.set({ toolAdmissionClosedAt: sql`now()` })
562562
.where(eq(copilotRuns.id, run.runId))
563-
stopHeld.resolve()
563+
const [backend] = await tx.execute<{ pid: number }>(sql`SELECT pg_backend_pid() AS pid`)
564+
stopHeld.resolve(backend.pid)
564565
await releaseStop.promise
565566
})
566-
await stopHeld.promise
567+
const stopPid = await stopHeld.promise
567568
const completing = completeDesktopTool.execute({
568569
principal: desktop.principal,
569570
input: { deviceId: desktop.deviceId, toolCallId, executionToken, status: 'success' },
570571
})
571-
await sleep(300)
572+
/** Release Stop only once the result is queued behind its lock on the run row. */
573+
await expect
574+
.poll(async () => {
575+
const [waiter] = await db.execute<{ pid: number }>(sql`
576+
SELECT pid FROM pg_stat_activity WHERE wait_event_type = 'Lock'
577+
AND ${stopPid}::int = ANY(pg_blocking_pids(pid)) LIMIT 1`)
578+
return Boolean(waiter)
579+
})
580+
.toBe(true)
572581
releaseStop.resolve()
573582
await stopping
574583

0 commit comments

Comments
 (0)