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)