Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
Motivation
Both to handle commit partition failure and data node restart, it's required to cleanup local writeIntents in order to eliminate excessive write intent resolutions. It's not a matter of correctness, it's a matter of optimization.
Definition of Done
- Firstly, after write intent resolution, both coordinator path and commit partition path, it's required to change local state fot the corresponding transaction to either ABORTED or COMMITED in txnStateMap if writeIntentResolution outcome is ABORTED or COMMITED. That will allow switching all further writeIntentResolutions from a given node for corresponding transaction to a local path that is of course much faster.
- An asynchronous task should be scheduled that will cleanup given write intent by either committing or aborting it.
Implementation Notes
- Earlier we've agreed that only RW transactions should cleanup writeIntents, however I believe it's no longer reasonable, meaning that both RW and RO should do this.
- In order to minimize the effect of side write intents cleanup on transaction execution flow, we must perform this (and any other) write intents cleanup asynchronously in a special pool.
- Write intent cleanup should be fully idempotent, meaning, that two separate transactions may touch the same write intent and start the cleanup. One of them will win and actually do the cleanup, another will result in no-op.
Attachments
Issue Links
- depends upon
-
IGNITE-20379 Concurrency issues with write intent tracking
- Resolved
-
IGNITE-20347 Add transaction id to commitWrite and abortWrite methods of Storage
- Open
-
IGNITE-20354 Reduce code duplication in commit cleanup
- Resolved
- is blocked by
-
IGNITE-20033 Implement local txnStateMap
- Resolved
- is related to
-
IGNITE-20445 Clean up write intents for RW transaction on replication group nodes
- Resolved
- relates to
-
IGNITE-20395 Clean up write intents for RW transaction on primary
- Resolved
- links to