TransactionInProgressException
TL;DR — Un nuovo tentativo TransactWriteItems conteneva lo stesso ClientRequestToken di un tentativo che è ancora in esecuzione. Di solito si tratta del timeout del client più veloce del completamento della transazione, quindi il nuovo tentativo dell'SDK entra in conflitto con l'originale in corso. Continua a riprovare con il backoff (un secondo tentativo al termine dell'originale restituisce il successo idempotente) e regola i timeout in modo che almeno un tentativo venga effettuato dopo circa 5 secondi.
Cosa significa
TransactionInProgressException: The transaction with the given request token
is already in progress."ClientRequestToken" rende "TransactWriteItems" idempotente: chiamate identiche all'interno di una finestra di 10 minuti contano come una transazione. Mentre il primo tentativo è ancora in fase di elaborazione, non è ancora possibile rispondere a una seconda chiamata con lo stesso token — non è né un duplicato di una transazione completata né una nuova — quindi DynamoDB la rifiuta con questa eccezione. È un segnale di temporizzazione, non un errore di dati.
Perché succede
- Timeout del client più breve della latenza della transazione: il timeout della richiesta si attiva, l'SDK riprova e il nuovo tentativo arriva mentre è ancora in corso il commit della transazione originale.
- Politica aggressiva sui nuovi tentativi: un backoff molto breve significa che diversi tentativi possono accumularsi su una transazione che richiede pochi secondi.
- Due chiamanti che condividono un token: processi separati deliberatamente (o accidentalmente) emettendo lo stesso
ClientRequestTokencontemporaneamente.
Come risolverlo
Lascia che i tentativi continuino con un backoff esponenziale: una volta completata la transazione in volo, un tentativo con lo stesso token restituisce successo senza applicare le scritture due volte. Considera questa eccezione come riprovabile.
Regolare i timeout in base alle linee guida documentate in modo che sia possibile effettuare un nuovo tentativo una volta completata la transazione:
- consentire l'elaborazione di almeno un tentativo trascorsi 5 secondi dal primo tentativo;
- imposta il timeout per richiesta su 1 secondo o più;
- mantenere il timeout del socket leggermente inferiore al timeout della richiesta;
- utilizzare il backoff esponenziale tra i tentativi.
Non ruotare il token al nuovo tentativo: la generazione di un nuovo
ClientRequestTokenper tentativo converte silenziosamente i tentativi in nuove transazioni (applicando due volte le scritture). Stesso intento, stesso token, per un massimo di 10 minuti:const token = randomUUID(); // one token per logical transaction await client.send(new TransactWriteItemsCommand({TransactItems, ClientRequestToken: token}));Serializza chiamanti simultanei intenzionali: se due lavoratori possono inviare la stessa transazione logica, assegnarne uno al proprietario o instradarli entrambi attraverso una coda.
Log token e tempo trascorso per ogni tentativo. La guida di 5 secondi è documentata: i tuoi registri dovrebbero mostrare se i tentativi arrivano troppo presto.
Percorso in DynoTable
Ispeziona gli elementi toccati da una transazione lunga prima di regolare i timeout: aprili con ⌘K e conferma che non vi siano conflitti di tasti di scelta rapida da parte di autori paralleli. La gestione temporanea (⌘S) ti consente di riprodurre prima una transazione più piccola rispetto ai dati di sviluppo.
Stimare il costo di scrittura transazionale con il calcolatore dei prezzi. Cambia profilo con ⌘P; Verifica connessione in Impostazioni → Profili. Consulta Connetti a AWS e Installa.
Fonti
- TransactWriteItems - Riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Transazioni Amazon DynamoDB: come funziona (verificato il 13-07-2026)
Errori correlati
- IdempotentParameterMismatchException — stesso token, carico utile diverso.
- TransactionCanceledException: la transazione stessa non è riuscita.
- TransactionConflittiException: conflitto a livello di elemento con un'altra transazione.
- Esempio di codice: TransactWriteItems in Node.js: mostra l'utilizzo di ClientRequestToken.
- Impara: DynamoDB transazioni
Riferimenti
- Riferimento TransactWriteItems - Amazon DynamoDB API
- Transazioni Amazon DynamoDB: come funziona - Guida per sviluppatori Amazon DynamoDB
- Gestione degli errori con DynamoDB - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.