CallbackFailedException throws NullPointerException when a failed callback has no Error
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- java
- Ambito
- backend-api-design
Direzione di ricerca
Parti da sdk/src/main/java/software/amazon/lambda/durable/exception/CallbackFailedException.java e leggi buildMessage insieme ai suoi punti di chiamata in operation/CallbackOperation.java (get()) e operation/ChildContextOperation.java. Applica la gestione null-safe per un ErrorObject mancante descritto nell'issue, poi aggiungi un test unitario che copre un'operazione CALLBACK FAILED senza CallbackDetails.Error e che assert CallbackFailedException (messaggio "Callback failed") invece di NullPointerException, ed esegui la suite di test esistente su eccezioni/operazioni.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
SendDurableExecutionCallbackFailure accepts a request with no Error because the field is optional. A callback that is failed this way reaches the SDK as a CALLBACK operation with Status: FAILED and no CallbackDetails.Error.
On that operation, CallbackOperation.get() throws new CallbackFailedException(op):
The constructor passes operation.callbackDetails().error() to buildMessage. That method calls error.errorType() without a null check:
So the handler gets a NullPointerException instead of CallbackFailedException, and a catch (CallbackFailedException e) block does not catch it. ChildContextOperation builds the same exception, so the same failure can occur there:
Steps to reproduce
- Create a callback in a durable handler and call
get()on it. - Call
SendDurableExecutionCallbackFailurefor that callback ID with noErrorin the request body. - On replay,
get()throwsNullPointerExceptionfromCallbackFailedException.buildMessage.
Expected behavior
get() throws CallbackFailedException with the message "Callback failed". This matches the reference JS implementation, which falls back to new CallbackExternalError("Callback failed") when Error is absent:
Suggested fix
Handle a null ErrorObject in buildMessage:
private static String buildMessage(ErrorObject error) {
if (error == null) {
return "Callback failed";
}
var errorType = error.errorType();
var errorMessage = error.errorMessage() != null ? error.errorMessage() : "Callback failed";
if (errorType != null && !errorType.isEmpty()) {
return errorType + ": " + errorMessage;
}
return errorMessage;
}
The errorMessage fallback also covers an Error that is present but has no message. JS uses error.ErrorMessage || "Callback failed" for that case.
DurableOperationException already accepts a null ErrorObject, so no other change is needed. Add a unit test for a FAILED callback operation with no CallbackDetails.Error.
- Lingua principale
- Java
- Stelle
- 28
- Fork
- 13
- Merge medio
- 2g 8h
- PR unite (30g)
- 40
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un 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 aws/aws-durable-execution-sdk-java
-
documentation pkg:sdk
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
aws/aws-durable-execution-sdk-java#645 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
aws/aws-durable-execution-sdk-java#300 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: root handler instrumentation misses the canonical OTel execution contextForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaneeds-triage
Difficoltà 5/5 Più di una settimana Idoneità per principianti 40/100
aws/aws-durable-execution-sdk-java#770 ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature]: Propagate per-operation trace context for chained invokesForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaenhancement needs-triage
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
aws/aws-durable-execution-sdk-java#764 ·
I maintainer di solito rispondono entro 1 giorno
-
bug needs-triage
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
aws/aws-durable-execution-sdk-java#763 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di aws/aws-durable-execution-sdk-java
Issue simili
-
component/operate kind/feature-request
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
Forge coverage prompts carry text the agent cannot act onForse già presa @graalvmbot l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
oracle/graalvm-reachability-metadata#10572 ·
I maintainer di solito rispondono entro 1 giorno
-
[CI] Core CI doesn't run for changes to amoro-format-lance (and amoro-web)Forse già presa @MarkAlex1234 l’ha presa oggi. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
area/docs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno