TransactionInProgressException
TL;DR — Percobaan ulang TransactWriteItems membawa ClientRequestToken yang sama dengan percobaan yang masih dijalankan. Ini biasanya waktu tunggu klien Anda lebih cepat daripada penyelesaian transaksi, sehingga percobaan ulang SDK bertabrakan dengan percobaan asli yang sedang berjalan. Teruslah mencoba ulang dengan backoff — percobaan ulang berikutnya setelah penyelesaian asli akan mengembalikan keberhasilan idempoten — dan sesuaikan batas waktu sehingga setidaknya satu percobaan ulang dilakukan setelah ~5 detik.
Apa artinya
TransactionInProgressException: The transaction with the given request token
is already in progress.ClientRequestToken menjadikan TransactWriteItems idempoten: panggilan identik dalam jendela 10 menit dihitung sebagai satu transaksi. Sementara upaya pertama masih diproses, panggilan kedua dengan token yang sama belum dapat dijawab — ini bukan duplikat dari transaksi yang telah selesai atau transaksi baru — jadi DynamoDB menolaknya dengan pengecualian ini. Ini adalah sinyal waktu, bukan kesalahan data.
Mengapa itu terjadi
- Waktu tunggu klien lebih pendek dari latensi transaksi — waktu tunggu permintaan diaktifkan, percobaan ulang SDK, dan percobaan ulang dilakukan saat transaksi awal masih dilakukan.
- Kebijakan percobaan ulang yang agresif — backoff yang sangat singkat berarti beberapa percobaan ulang dapat dilakukan dalam satu transaksi yang memerlukan beberapa detik.
- Dua penelepon berbagi satu token — proses terpisah secara sengaja (atau tidak sengaja) mengeluarkan
ClientRequestTokenyang sama secara bersamaan.
Bagaimana cara memperbaikinya
Biarkan percobaan ulang dilanjutkan dengan backoff eksponensial — setelah transaksi dalam penerbangan selesai, percobaan ulang dengan token yang sama akan mengembalikan kesuksesan tanpa menerapkan penulisan dua kali. Perlakukan pengecualian ini sebagai pengecualian yang dapat dicoba ulang.
Sesuaikan batas waktu sesuai panduan yang terdokumentasi sehingga percobaan ulang dapat dilakukan setelah transaksi diselesaikan:
- mengizinkan setidaknya satu percobaan ulang untuk diproses setelah 5 detik berlalu sejak percobaan pertama;
- atur batas waktu per permintaan menjadi sekitar 1 detik atau lebih tinggi;
- pertahankan batas waktu soket sedikit di bawah batas waktu permintaan;
- gunakan backoff eksponensial di antara upaya.
Jangan merotasi token saat mencoba ulang — menghasilkan
ClientRequestTokenbaru setiap upaya secara diam-diam mengubah percobaan ulang menjadi transaksi baru (menerapkan penulisan dua kali). Niat yang sama, token yang sama, hingga 10 menit:const token = randomUUID(); // one token per logical transaction await client.send(new TransactWriteItemsCommand({TransactItems, ClientRequestToken: token}));Serialkan pemanggil serentak yang disengaja — jika dua worker dapat mengirimkan transaksi logis yang sama, jadikan salah satunya pemilik atau arahkan keduanya melalui antrean.
Catat token dan waktu yang berlalu pada setiap percobaan ulang. Panduan 5 detik itu terdokumentasi — log Anda akan menunjukkan apakah percobaan ulang datang terlalu dini.
Jalur di DynoTable
Periksa item yang disentuh transaksi panjang sebelum Anda menyetel batas waktu — buka item tersebut dengan ⌘K dan pastikan tidak ada pertentangan hot-key dari penulis paralel. Staging (⌘S) memungkinkan Anda memutar ulang transaksi yang lebih kecil terhadap data pengembang terlebih dahulu.
Perkirakan biaya penulisan transaksional dengan kalkulator harga. Ganti profil dengan ⌘P; Uji Koneksi pada Pengaturan → Profil. Lihat Menghubungkan ke AWS dan Instal.
Sumber
- TransactWriteItems — Referensi Amazon DynamoDB API (diverifikasi 13-07-2026)
- Transaksi Amazon DynamoDB: Cara kerjanya (diverifikasi 13-07-2026)
Kesalahan terkait
- IdempotentParameterMismatchException — token yang sama, muatan different.
- TransactionCanceledException — transaksi itu sendiri gagal.
- TransactionConflictException — konflik tingkat item dengan transaksi lain.
- Contoh kode: TransactWriteItems di Node.js — menunjukkan penggunaan ClientRequestToken.
- Pelajari: transaksi DynamoDB
Referensi
- TransactWriteItems — Referensi Amazon DynamoDB API
- Transaksi Amazon DynamoDB: Cara kerjanya — Panduan Pengembang Amazon DynamoDB
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.