Skip to content

TransactionCanceledException and IdempotentParameterMismatchException carry message; DynamoDB sends Message, and the token mismatch text differs #760

Open

Description

@LeeroyHannigan

ExtendDB writes every error message under a lower-case message key (crates/server/src/response.rs). For TransactionCanceledException and IdempotentParameterMismatchException, DynamoDB sends Message.

Measured on Amazon DynamoDB in us-east-1 on 2026-10-29 with TransactWriteItems and raw signed requests. ExtendDB is main at 8099ff0 with the same requests.

A transaction whose ConditionCheck fails. DynamoDB:

{"__type":"com.amazonaws.dynamodb.v20120810#TransactionCanceledException","CancellationReasons":[{"Code":"None"},{"Code":"ConditionalCheckFailed","Message":"The conditional request failed"}],"Message":"Transaction cancelled, please refer cancellation reasons for specific reasons [None, ConditionalCheckFailed]"}

ExtendDB sends the same reasons and text, with the top-level key message.

A second TransactWriteItems with the same ClientRequestToken and a different ExpressionAttributeValues. DynamoDB:

{"__type":"com.amazonaws.dynamodb.v20120810#IdempotentParameterMismatchException","Message":"Specified idempotent token was used with different request parameters within the idempotency window"}

ExtendDB:

{"__type":"com.amazonaws.dynamodb.v20120810#IdempotentParameterMismatchException","message":"The request uses the same client token as a previous, but different, request."}

The other errors captured the same day (ConditionalCheckFailedException, TransactionConflictException, ValidationException, ResourceNotFoundException, InternalServerError, ProvisionedThroughputExceededException, LimitExceededException) use message on DynamoDB, as ExtendDB does. The SDK model names the member Message for these two exceptions.

Why it matters

botocore reads either key. A client that reads these two exceptions' member by its modeled name, Message, finds no message in ExtendDB's body. An application that logs or matches the token mismatch text sees a string the service does not send.

Proposed change

Choose the key per error type: Message for these two, message for the rest. Use the service's text for the token mismatch, and pin both bodies with raw-body tests.

Activity

  1. LeeroyHannigan commented on Nov 3, 2026

    @LeeroyHannigan
    CollaboratorAuthor

    The two parts of this issue are in two pull requests:

    Re-measured on 3 November 2026 in us-east-1. A cancelled TransactWriteItems still carries Message.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions