RetryingHttpClient.executeAsync skips retry handling when delegate throws synchronously
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia da RetryingHttpClient.executeAsync() e ispeziona il percorso di retry esistente di handleAsync attorno alla chiamata al delegate. Esegui i test correnti relativi ai retry, quindi aggiungi una copertura di regressione per i fallimenti sincroni ritentabili e non ritentabili e verifica che gli header del conteggio dei retry rimangano corretti; il lavoro è completato quando i fallimenti sincroni seguono la stessa policy dei future eccezionali.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
RetryingHttpClient.executeAsync() calls the delegate before it has a CompletableFuture to attach its retry policy to:
val responseFuture = httpClient.executeAsync(requestWithRetryCount, requestOptions)
A custom HttpClient implementation is allowed by the SDK surface and can throw synchronously from executeAsync() instead of returning an exceptionally completed future.
When that happens, the exception escapes RetryingHttpClient.executeAsync() immediately. The existing handleAsync branch never sees it, so even retryable synchronous failures such as IOException, OpenAIIoException, or OpenAIRetryableException bypass the configured retry policy.
Expected behavior
Synchronous failures from the async delegate should enter the same retry decision path as exceptionally completed futures. Retryable failures should retry up to maxRetries; non-retryable failures should surface through the returned future.
Suggested fix
Wrap the delegate call and convert a synchronous throwable into an exceptionally completed CompletableFuture<HttpResponse> before applying the existing retry handler.
Add regression coverage for:
- a synchronous
OpenAIRetryableExceptionfollowed by a successful async response; - a synchronous non-retryable exception completing the returned future exceptionally without a retry;
- retry-count headers remaining correct across the synchronous-failure retry.
- Lingua principale
- Kotlin
- Stelle
- 1.5k
- Fork
- 266
- Merge medio
- 10h 11m
- PR unite (30g)
- 141
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 openai/openai-java
-
HttpRequest.url() logs spaces in path segments as literal plus signsForse già presa @sylvesterkaczmarek l’ha presa 55 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
openai/openai-java#886 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Make diarized transcription duration and task optionalForse già presa @wskr00 l’ha presa 85 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
openai/openai-java#802 · 2 commenti · 3 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 42/100
openai/openai-java#1160 ·
I maintainer di solito rispondono entro 1 giorno
-
AsyncStreamResponse can hang when the subscriber executor rejects workForse già presa @sylvesterkaczmarek l’ha presa 38 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 74/100
openai/openai-java#973 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
openai/openai-java#956 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di openai/openai-java
Issue simili
-
bugbane/qf good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
osservatorionessuno/bugbane#173 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Bayern feature:Application ready web
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
digitalfabrik/entitlementcard#3176 ·
I maintainer di solito rispondono entro 7 giorni
-
bug need-device
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
ramesh130/superplayer#495 ·
I maintainer di solito rispondono entro 1 giorno
-
Remove song from playlistAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
maxrave-dev/SimpMusic#2649 ·
I maintainer di solito rispondono entro 2 giorni