Vladislav Pyatkov created IGNITE-19849:
------------------------------------------

             Summary: Generate transaction id in client side
                 Key: IGNITE-19849
                 URL: https://issues.apache.org/jira/browse/IGNITE-19849
             Project: Ignite
          Issue Type: Improvement
            Reporter: Vladislav Pyatkov


*Motivation*
Currently, transaction id is generated on a server node (the node is also 
called a transaction coordinator):
{code}
HybridTimestamp beginTimestamp = clock.now();
UUID txId = transactionIdGenerator.transactionIdFor(beginTimestamp);
{code}
Transaction id has start time internally. In other word, when we call 
{{transactions().begin()}} we define a time when the transaction is started. 
The time is used in deadlock resolution mechanism.
In case when the clock on different nodes slightly skewed we may receive 
different order unlike that we have in client side. Because the transactions 
have various coordinators with their clocks. Of course, unexpected behavior of 
deadlock resolution is taken a place here.
*Definition of done*
Transaction id is generated on client side, then passes to server. The server 
starts the transaction with a predefined id.
The transaction's order is defined in client side regardless of clock on 
servers.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to