Details
-
Task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
This ticket implies the implementation of tx coordination, as described in [1].
This includes:
- TxManager - top-level manager for tx state and coordination
- pre-writes - each tx write is pre-written to partition store in special format
- replicated tx state - tx state is stored in the partition's raft group
- integration with lock manager (see precaution chapter in [1])
The example of single key tx:
Tx client TxCoordinator Partition leaseholder. tx.start ---------> assign timestamp (id) txstate = PENDING <--------- table.put(k,v) ---------> enlist(partition(k)); lh = getLeaseholder(partition(k)) send UpsertCommand(k) to lh ------------> replicate txstate = PENDING lockManager.tryAcquire(k,timestamp); wait for completion async prewrite(k, v) -- replicate to all replicas repeat for each enlisted partition... <--------- tx.finish - commit or rollback ---------> send finish request to all remote enlisted nodes ------------> replicate txstate = COMMITTED/ABORTED txState = COMMITTED/ABORTED lockManager.tryRelease(k, timestamp) <------------ when all leasholders are replied, reply to initiator <--------
[1] https://github.com/apache/ignite-3/tree/main/modules/transactions
Attachments
Issue Links
- Blocked
-
IGNITE-15991 Remove whitespace indents on empty lines
- Resolved
- causes
-
IGNITE-16004 Preserve key order in InternalTableImpl#collectMultiRowsResponses
- Resolved
-
IGNITE-15939 .NET: Fix tests related to reading non existing keys
- Resolved
- links to