world-vercel waitForTerminalStatus drops the abort signal on its fallback read
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- backend
Direzione di ricerca
Inizia da waitForWorkflowRunTerminalStatus e segui le chiamate di fallback a getWorkflowRun. Poi segui la chiamata fino a readRun per vedere come vengono passate le opzioni della richiesta. Controlla le letture di fallback dopo una risposta con uno stato non supportato, durante la finestra di stato non supportato e quando il budget è zero; il lavoro è completato quando un’attesa interrotta viene rifiutata prontamente in ogni percorso. Esegui i test pertinenti per l’attesa dello stato terminale e aggiungi test per il comportamento di interruzione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
waitForWorkflowRunTerminalStatus passes params.signal to the long-poll read of /v2/runs/:id/status, but its three fallback paths call getWorkflowRun(id, { resolveData }, config) without it: after the status route answers 404/405/501/504, during the five-minute unsupported window that follows, and when the budget clamps to zero. An aborted wait on those paths keeps its request open until the request timeout (60s by default) and keeps holding a connection from the default pool.
Versions: @workflow/world-vercel 5.0.1, same code on main at 2d2159e.
// node repro.mjs fallback|native
import http from 'node:http';
const mode = process.argv[2];
const server = http.createServer((req, res) => {
if (req.url.includes('/status') && mode === 'fallback') res.writeHead(404).end();
// otherwise never answer
});
await new Promise((r) => server.listen(0, '127.0.0.1', r));
process.env.VERCEL_WORKFLOW_SERVER_URL = `http://127.0.0.1:${server.address().port}`;
const { createStorage } = await import('@workflow/world-vercel');
const runs = createStorage({ token: 'fake-token' }).runs;
const t = Date.now();
const out = await runs
.waitForTerminalStatus('wrun_01JZZZZZZZZZZZZZZZZZZZZZZZ', { timeoutMs: 30_000, signal: AbortSignal.timeout(1_000) })
.then(() => 'resolved', (e) => `rejected ${e.name}`);
console.log(mode, out, `${Date.now() - t}ms`);
process.exit(0);
native rejected WorkflowWorldError 1007ms
fallback rejected WorkflowWorldError 60013ms
Expected: the wait rejects about 1s after the signal aborts on every path.
Actual: on the fallback read it rejects only when the 60s request timeout fires.
Possible fix: forward signal through getWorkflowRun to readRun on the fallback calls, and check signal.throwIfAborted() at entry.
- Lingua principale
- TypeScript
- Stelle
- 2.5k
- Fork
- 385
- Merge medio
- 23h 29m
- PR unite (30g)
- 162
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di vercel/workflow
-
node-module-esbuild-plugin: getImportedIdentifier only checks the first named import when locating a violationForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Feature: Expose isLastAttempt/maxAttempts in step metadataForse già presa @joelfickson l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
vercel/workflow#4979 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
WorkflowServerReadableStream leaks the connection when cancelled before streams.get() resolvesForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
vercel/workflow#4644 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
world-local write() does not retry a transient Windows EPERM from its existence probeForse già presa @pranaygp l’ha presa 33 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
vercel/workflow#4203 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di vercel/workflow
Issue simili
-
DRY stats column groupingsApertaready
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
wheresrhys/totf#1214 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
CodeChefVIT/ffcs#281 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
endora-commerce/endora-commerce#451 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
vetro-protocol/vetro-monorepo#1007 ·
I maintainer di solito rispondono entro 1 giorno