CallbackFailedException throws NullPointerException when a failed callback has no Error
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- java
- Domaine
- backend-api-design
Piste de recherche
Commencez par sdk/src/main/java/software/amazon/lambda/durable/exception/CallbackFailedException.java et lisez buildMessage ainsi que ses points d'appel dans operation/CallbackOperation.java (get()) et operation/ChildContextOperation.java. Appliquez la gestion null-safe pour un ErrorObject manquant décrit dans l'issue, puis ajoutez un test unitaire couvrant une opération CALLBACK FAILED sans CallbackDetails.Error qui assert CallbackFailedException (message "Callback failed") au lieu de NullPointerException, et lancez la suite de tests d'exceptions/opérations existante.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Java
- Étoiles
- 28
- Forks
- 16
- Merge moyen
- 2 j 17 h
- PR mergées (30 j)
- 56
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de aws/aws-durable-execution-sdk-java
-
documentation pkg:sdk
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
aws/aws-durable-execution-sdk-java#645 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
aws/aws-durable-execution-sdk-java#300 ·
Les mainteneurs répondent en général sous 1 jour
-
bug needs-triage
Difficulté 4/5 3-5 jours Accessibilité débutants 54/100
aws/aws-durable-execution-sdk-java#815 ·
Les mainteneurs répondent en général sous 1 jour
-
[Epic]: Durable Functions on LMIPeut-être pris @zhongkechen l’a pris il y a 8 jours. Ouverte
aws/aws-durable-execution-sdk-java#798 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
needs-triage
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 8/100
aws/aws-durable-execution-sdk-java#787 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de aws/aws-durable-execution-sdk-java
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
code-maintenance
Difficulté 2/5 1-3 heures Accessibilité débutants 80/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
krizaka/krizaka-notifications#32 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
klikli-dev/occultism#1719 ·