You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexey Scherbakov (Jira)" <ji...@apache.org> on 2021/10/21 13:45:00 UTC

[jira] [Updated] (IGNITE-15085) Implement tx coordination

     [ https://issues.apache.org/jira/browse/IGNITE-15085?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Alexey Scherbakov updated IGNITE-15085:
---------------------------------------
    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:
{noformat}
Tx thread               TxManager                                     Partition Leaseholder
tx.start
            --------->  
			     assign timestamp (id)
		             txstate = PENDING
            <---------		   	               
table.put(k,v)   
            --------->   
			     lh = metastore.getLeaseholder(k)
				                                      ------------>
                                                                                     write txstate = PENDING
                                                                                     fut=lockManager.tryAcquire(k,timestamp);
                                                                                     wait for completion async
                                                                                     prewrite(k, v)
            <---------
tx.commit
            --------->
                                                                    ------------>
                                                                                      write txstate = COMMITTED
                                                                                      lockManager.tryRelease(k, timestamp)
							            <----------- async clear garbage
                        lh.txmap.state = COMMITTED		
			when all leasholders are replied,
			reply to initiator
	    <--------	
{noformat}
[1] [https://github.com/apache/ignite-3/tree/main/modules/transactions]

  was:
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 thread               TxManager                                     Partition Leaseholder
tx.start
            --------->  
			     assign timestamp (id)
		             txstate = PENDING
            <---------		   	               
table.put(k,v)   
            --------->   
			     lh = metastore.getLeaseholder(k)
				                                      ------------>
                                                                                     write txstate = PENDING
                                                                                     fut=lockManager.tryAcquire(k,timestamp);
                                                                                     wait for completion async
                                                                                     prewrite(k, v)
            <---------
tx.commit
            --------->
                                                                    ------------>
                                                                                      write txstate = COMMITTED
                                                                                      lockManager.tryRelease(k, timestamp)
							            <----------- async clear garbage
                        txmap.lh.state = COMMITTED		
			when all leasholders are replied,
			reply to initiator
	    <--------	
{noformat}

[1] https://github.com/apache/ignite-3/tree/main/modules/transactions


> Implement tx coordination
> -------------------------
>
>                 Key: IGNITE-15085
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15085
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Alexey Scherbakov
>            Priority: Major
>              Labels: iep-61, ignite-3
>
> 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 thread               TxManager                                     Partition Leaseholder
> tx.start
>             --------->  
> 			     assign timestamp (id)
> 		             txstate = PENDING
>             <---------		   	               
> table.put(k,v)   
>             --------->   
> 			     lh = metastore.getLeaseholder(k)
> 				                                      ------------>
>                                                                                      write txstate = PENDING
>                                                                                      fut=lockManager.tryAcquire(k,timestamp);
>                                                                                      wait for completion async
>                                                                                      prewrite(k, v)
>             <---------
> tx.commit
>             --------->
>                                                                     ------------>
>                                                                                       write txstate = COMMITTED
>                                                                                       lockManager.tryRelease(k, timestamp)
> 							            <----------- async clear garbage
>                         lh.txmap.state = COMMITTED		
> 			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.3.4#803005)