Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

TransactWriteItems token replay ignores ReturnConsumedCapacity and ReturnItemCollectionMetrics

オープン
#514 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 4 日以内に返信

@LeeroyHannigan がすでに取り組んでいます。

2026年10月24日 から。

  • #526 @LeeroyHannigan による — オープン

評価

この issue はまだ評価されていません。

説明

What happens

TransactWriteItems decides whether a request with a ClientRequestToken it has already seen is a replay by comparing a fingerprint of the request. The fingerprint covers TransactItems only (compute_fingerprint in crates/engine/src/transact_write_helpers.rs), so a second request that keeps the token and the items but changes ReturnConsumedCapacity or ReturnItemCollectionMetrics is served as a replay.

When the fingerprints differ, the error message is The request uses the same client token as a previous, but different, request.

What DynamoDB does

Measured 2026-10-24 at 17:31 UTC in us-east-1, client retries off. Each first call carries a token and one Update (SET v = :v), and the second call repeats the token and the items:

first call second call answer to the second call
no Return fields the same 200, replay
no Return fields ReturnConsumedCapacity: TOTAL 400 IdempotentParameterMismatchException
no Return fields ReturnConsumedCapacity: NONE 200, replay
no Return fields ReturnItemCollectionMetrics: SIZE 400 IdempotentParameterMismatchException
no Return fields ReturnItemCollectionMetrics: NONE 200, replay
ReturnConsumedCapacity: TOTAL no Return fields 400 IdempotentParameterMismatchException

The message in every mismatch row is Specified idempotent token was used with different request parameters within the idempotency window. The same mismatch, with the same message, was measured earlier the same day for a removal-only Update with ReturnConsumedCapacity: TOTAL added on the replay.

So the service compares the two Return fields as well as the items, and treats an absent field as NONE.

Reproduction on main (744ea291)

  1. TransactWriteItems with ClientRequestToken: t1 and one Update of key k.
  2. The same request with ReturnConsumedCapacity: TOTAL added.

ExtendDB answers the second call with 200 and ConsumedCapacity of 2.0 read capacity units, as a replay. DynamoDB answers IdempotentParameterMismatchException. A third call with the same token and a different key answers IdempotentParameterMismatchException on both, with the different message text above.

主要言語
Rust
スター
517
フォーク
60
平均マージ
4日 10時間
マージ済み PR(30日)
37

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ExtendDB/extenddb のほかの issue

ExtendDB/extenddb の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。