[ https://issues.apache.org/jira/browse/IGNITE-15085?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17444419#comment-17444419 ]
Vyacheslav Koptilin commented on IGNITE-15085: ---------------------------------------------- Hello [~alapin], Could you please take a look at this pull request? > Implement tx coordination > ------------------------- > > Key: IGNITE-15085 > URL: https://issues.apache.org/jira/browse/IGNITE-15085 > Project: Ignite > Issue Type: Task > Reporter: Alexey Scherbakov > Assignee: Alexey Scherbakov > Priority: Major > Labels: iep-61, ignite-3 > Time Spent: 7h 40m > Remaining Estimate: 0h > > 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: > {noformat} > 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 > <-------- > {noformat} > [1] [https://github.com/apache/ignite-3/tree/main/modules/transactions] -- This message was sent by Atlassian Jira (v8.20.1#820001)