TransactWriteItems token replay ignores ReturnConsumedCapacity and ReturnItemCollectionMetrics
メンテナーはふだん 4 日以内に返信
評価
この 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)
TransactWriteItemswithClientRequestToken: t1and oneUpdateof keyk.- The same request with
ReturnConsumedCapacity: TOTALadded.
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
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ExtendDB/extenddb のほかの issue
-
難易度 2/5 3〜5日 初心者へのやさしさ 65/100
メンテナーはふだん 4 日以内に返信
-
documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
ExtendDB/extenddb#658 · コメント 1 件 ·
メンテナーはふだん 4 日以内に返信
-
backend:postgresql bug
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 4 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 4 日以内に返信
-
backend:mongodb bug
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
メンテナーはふだん 4 日以内に返信
ExtendDB/extenddb の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
メンテナーはふだん 1 日以内に返信
-
o8 next debug build aborts on Glass to Dark appearance switch (nil identifier messaged before check)オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
hurttlocker/o8#5112 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
memory_patch_page drops the `#` of headings like `## Notes on C#`対応中かも @viniciusdsandrade が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
akitaonrails/ai-memory#1859 ·
メンテナーはふだん 1 日以内に返信