Does the Rust AWS SDK provide information on where a DynamoDB conditional check failed exactly? I have multiple conditional checks and the Err response doesn't shed any light on which condition failed.
TransactionCanceledException(TransactionCanceledException { message: Some("Transaction cancelled, please refer cancellation reasons for specific reasons [None, ConditionalCheckFailed]"), cancellation_reasons: Some([CancellationReason { item: None, code: Some("None"), message: None }, CancellationReason { item: None, code: Some("ConditionalCheckFailed"), message: Some("The conditional request failed") }]), meta: ErrorMetadata { code: Some("TransactionCanceledException"), message: Some("Transaction cancelled, please refer cancellation reasons for specific reasons [None, ConditionalCheckFailed]"),
let request = client
.transact_write_items()
.set_transact_items(Some(transact_items));
match request.send().await {
Err(err) => {
match err.into_service_error() {
aws_sdk_dynamodb::operation::transact_write_items::TransactWriteItemsError::TransactionCanceledException(i) => {
println!("reason: {:?}", &i.cancellation_reasons().unwrap());
},
_ => todo!(),
};
[CancellationReason { item: None, code: Some("None"), message: None }, CancellationReason { item: None, code: Some("ConditionalCheckFailed"), message: Some("The conditional request failed") }]
Yes you need to supply the parameter return_values_on_condition_check_failure
and set it to ALL_OLD
:
https://docs.rs/rusoto_dynamodb/latest/rusoto_dynamodb/struct.Put.html
This will return the value of the item on the server side, which you can then understand why your condition failed.
[None, ConditionalCheckFailed]
this already let's you know the condition failed for the second item in your transactional batch.