AbortSignal is ignored while waiting for retry backoff
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- api
Direzione di ricerca
Inizia da retryRequest() in src/core.ts:595-630 e traccia come makeRequest() gestisce options.signal. Verifica la riproduzione fornita; il lavoro è completato quando l'annullamento durante il ritardo di 500 ms del tentativo successivo viene rifiutato prontamente con APIUserAbortError e il normale comportamento dei tentativi rimane intatto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Aborting a request while it is waiting to retry does not interrupt the retry delay. The SDK waits for the full Retry-After/backoff period before it notices the signal is aborted.
retryRequest() uses an unconditional await sleep(timeoutMillis) at src/core.ts:595-630. The caller's options.signal is only checked when makeRequest() starts the next attempt.
Reproduction
import Browserbase from '@browserbasehq/sdk';
let attempts = 0;
const client = new Browserbase({
apiKey: 'test',
maxRetries: 1,
fetch: async () => {
attempts++;
return new Response('{}', {
status: attempts === 1 ? 429 : 200,
headers: {
'content-type': 'application/json',
'retry-after-ms': '500',
},
});
},
});
const controller = new AbortController();
const started = Date.now();
const request = client.get('/retry', { signal: controller.signal });
setTimeout(() => controller.abort(), 20);
await request.catch((error) => {
console.log(error.constructor.name); // APIUserAbortError
console.log(Date.now() - started); // ~500 ms, not ~20 ms
});
Expected behavior
The retry wait is abortable, so the promise rejects with APIUserAbortError promptly after about 20 ms.
Actual behavior
The promise does not reject until the complete 500 ms retry delay has elapsed. A long server-provided Retry-After value makes cancellation ineffective for that entire period.
Why this matters
Abort signals are used to release work when requests, jobs, or incoming HTTP connections are canceled. Keeping canceled operations pending through retry delays wastes resources and makes shutdown/cancellation latency unpredictable. The delay should race against the signal and clean up its listener/timer on either outcome.
Tested against @browserbasehq/sdk 2.18.0 / current main (b781bd7).
- Lingua principale
- TypeScript
- Stelle
- 65
- Fork
- 17
- Merge medio
- 16m
- PR unite (30g)
- 2
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la 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 browserbase/sdk-node
-
Binary ArrayBufferView slices send the entire backing bufferForse già presa @abhinavkr26104 l’ha presa 51 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
browserbase/sdk-node#202 ·
-
content-length header collision → InvalidArgumentError: invalid content-length header when a custom undici global dispatcher is installedForse già presa @edenbuilds l’ha presa 50 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
browserbase/sdk-node#197 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
browserbase/sdk-node#193 ·
-
[Bug] contexts.delete() fails with 400 — same Content-Type issue as extensions.delete() (#169)Forse già presa @edenbuilds l’ha presa 59 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
browserbase/sdk-node#180 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 66/100
browserbase/sdk-node#218 · 2 commenti ·
Tutte le issue di browserbase/sdk-node
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
AOSSIE-Org/DebateAI#611 ·
I maintainer di solito rispondono entro 3 giorni
-
Upgrade node-libzim to 4.7.0Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
openzim/mwoffliner#2933 ·
I maintainer di solito rispondono entro 1 giorno
-
Use the README category name for website links and submissionsForse già presa @dajiaohuang l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
birobirobiro/awesome-shadcn-ui#647 ·
I maintainer di solito rispondono entro 2 giorni
-
Twake Drive picker: closePicker() never destroys the intent (stop() is on the promise returned by start(), not by create())Forse già presa @chibenwa l’ha presa oggi. Apertaclaude
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
linagora/twake-calendar-frontend#1498 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Add: Valea Prahovei TV RO SDApertacheck:passed streams:add
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno