feat: support previous transaction ID in DatastoreTransactionManager … #4277
+78
−152
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR addresses issue #4262 by adding support for the previous_transaction_id in DatastoreTransactionManager. This allows for better handling of sequential transactions and improves idempotency when interacting with Google Cloud Datastore.
Key Changes:
Dynamic Transaction Options: Updated doBegin to utilize TransactionOptions.Builder, allowing the inclusion of a previousTransactionId if present in the Tx object.
Nullability Compliance: Added @nonnull and @nullable annotations to override methods to satisfy the project's @NonNullApi constraints and resolve IDE warnings.
Code Cleanup:
Removed redundant null checks in doCommit and doRollback to resolve "always true" logic warnings.
Optimized doCleanupAfterCompletion using Java's pattern matching for instanceof.
Unit Testing: Added a new test class DatastoreTransactionManagerTests to verify that the previousTransactionId is correctly propagated to the Datastore client.
Verification Results:
Linter/IDE: 0 problems found in IntelliJ (all nullability and "unused method" warnings resolved).
Tests: testBeginWithPreviousTransactionId passed successfully.
See
also CONTRIBUTING.md
.