Hi Igniters, Finally, all dependent tickets are resolved and I've completed the implementation of thin client transactions support. The patch [1] includes server-side implementation and java thin client-side implementation. Changes to thin client protocol and top-level view of implementation also described in IEP [2]. Can anyone review the patch?
[1]: https://issues.apache.org/jira/browse/IGNITE-9410 [2]: https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support пн, 27 мая 2019 г. в 13:27, Alex Plehanov <plehanov.a...@gmail.com>: > Ivan, > > Yes, .NET client has such capability. Pavel Tupitsyn already mentions it > in this thread. As far as I understand, in .NET client implementation to > dispatch responses dedicated thread is used. > In a draft implementation of IGNITE-11685 I've used another approach: each > request thread can read a response (if lock is acquired by this thread > successfully) and complete a future of its own request or another threads > request. > > пн, 27 мая 2019 г. в 13:01, Павлухин Иван <vololo...@gmail.com>: > >> Alex, >> >> I am quite curious about async implementations from other clients. Is >> there any design document describing such implementations? Does .NET >> client have such capability? >> >> Actually, I forgot to finish my previous message. One of my concerns >> is that a concurrent response dispatch does not sound as a trivial >> thing. So, I would like to understand if we already have a good >> approach for that. If not then I suppose it worth a discussion. >> >> пн, 27 мая 2019 г. в 12:51, Alex Plehanov <plehanov.a...@gmail.com>: >> > >> > Hi Ivan. >> > >> > Thin client transactions support is not only for java thin client. There >> > are other clients, some of them already work in async mode. >> > Ticket IGNITE-11685 already has draft implementation too, but now it's >> > based on some changes to java thin client which were made by >> "transaction >> > support" implementation. I think this ticket will be ready in a couple >> of >> > days after "transaction support" will be merged. And both patches will >> be >> > included in the same release. >> > >> > пн, 27 мая 2019 г. в 11:57, Павлухин Иван <vololo...@gmail.com>: >> > >> > > Hi Alex, >> > > >> > > Regarding a problem with possible deadlock when two concurrent >> > > transactions from the same client are trying to lock the same key and >> > > an issue [1]. It seems to me that without fixing the issue [1] a >> > > client transactions feature is not practical. Everyone who uses a >> > > client from multiple threads can face a deadlock which is impossible >> > > to deal with. Or am I missing something here? >> > > >> > > One workaround I can imagine is failing a transactions execution from >> > > concurrent threads for a first time. >> > > >> > > [1] https://issues.apache.org/jira/browse/IGNITE-11685 >> > > >> > > вт, 21 мая 2019 г. в 19:05, Alex Plehanov <plehanov.a...@gmail.com>: >> > > > >> > > > Guys, >> > > > >> > > > I've updated the IEP [1]. Please have a look. >> > > > >> > > > [1] >> > > > >> > > >> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support >> > > > >> > > > >> > > > вт, 21 мая 2019 г., 14:19 Alex Plehanov <plehanov.a...@gmail.com>: >> > > > >> > > > > Ivan, >> > > > > >> > > > > Yes, I have plans to do that (at least for java thin client). >> Something >> > > > > like new class "ClientTransactionConfiguration" inside >> > > > > "ClientConfiguration". >> > > > > >> > > > > вт, 21 мая 2019 г. в 13:37, Павлухин Иван <vololo...@gmail.com>: >> > > > > >> > > > >> Alex, >> > > > >> >> > > > >> Are you going to introduce settings specifying default values >> for tx >> > > > >> concurrency and isolation in client configuration? >> > > > >> >> > > > >> пн, 20 мая 2019 г. в 19:34, Alex Plehanov < >> plehanov.a...@gmail.com>: >> > > > >> > >> > > > >> > Igor, >> > > > >> > >> > > > >> > Perhaps we don't really need to use server's default values >> for tx >> > > > >> > parameters. It's a minor fix and can be easily implemented if >> it >> > > will be >> > > > >> > required in the future. >> > > > >> > I will update IEP tomorrow regarding point 1 and point 3. >> > > > >> > Thanks for your feedback. >> > > > >> > >> > > > >> > пн, 20 мая 2019 г. в 15:24, Igor Sapego <isap...@apache.org>: >> > > > >> > >> > > > >> > > Ivan, >> > > > >> > > >> > > > >> > > This may be a good point for a DBMS, but Ignite is much more >> than >> > > > >> just a >> > > > >> > > DBMS and Ignite client code is not just an SQL query (which >> > > execution >> > > > >> > > inherently heavily depends on DBMS). With database user is >> > > expecting >> > > > >> that >> > > > >> > > server have a lot of control on query execution. But with >> Ignite, >> > > in >> > > > >> my >> > > > >> > > opinion, >> > > > >> > > user writes generic code including business logic in native >> > > language >> > > > >> and >> > > > >> > > may >> > > > >> > > expect more deterministic behaviour from a client. >> > > > >> > > >> > > > >> > > Also, thick clients do not use server-side defaults. >> > > > >> > > >> > > > >> > > Of course, this question is debatable and It's not like I >> 100% >> > > against >> > > > >> > > server-side >> > > > >> > > defaults here, I just suggest to discuss it in more detail. >> > > > >> > > >> > > > >> > > Best Regards, >> > > > >> > > Igor >> > > > >> > > >> > > > >> > > >> > > > >> > > On Mon, May 20, 2019 at 2:21 PM Павлухин Иван < >> > > vololo...@gmail.com> >> > > > >> wrote: >> > > > >> > > >> > > > >> > > > Igor, Alex, >> > > > >> > > > >> > > > >> > > > Regarding point 1. I must say that SQL vendors usually >> allow to >> > > > >> > > > configure default timeouts and a transaction isolation on a >> > > server >> > > > >> > > > side. E.g. in MySQL you can do a following: >> > > > >> > > > set local tx_isolation = <isolation> -- per SQL client >> session >> > > > >> > > > (usually physical network connection) >> > > > >> > > > set global tx_isolation = <isolation> -- global settings, >> all >> > > > >> clients >> > > > >> > > > (which does not override it) are affected >> > > > >> > > > >> > > > >> > > > So, if it is a standard practice why should do it >> differently? >> > > If it >> > > > >> > > > is not, we can continue discussion. Do we have some >> examples >> > > > >> following >> > > > >> > > > opposite way (client-wide default setting)? >> > > > >> > > > >> > > > >> > > > пн, 20 мая 2019 г. в 13:50, Igor Sapego < >> isap...@apache.org>: >> > > > >> > > > > >> > > > >> > > > > 1. In my opinion, having client-specific transaction >> > > parameters is >> > > > >> > > > expected >> > > > >> > > > > for >> > > > >> > > > > client when have different arguments depending on server >> seems >> > > > >> > > unexpected >> > > > >> > > > > and can lead to hard-to-debug bugs and issues when >> updating >> > > from >> > > > >> old to >> > > > >> > > > new >> > > > >> > > > > server versions. Also it goes against common practice >> with >> > > > >> arguments of >> > > > >> > > > thin >> > > > >> > > > > client and thus, may be even more unexpected. >> > > > >> > > > > >> > > > >> > > > > I believe that if we want to add ability to client to >> adopt >> > > some >> > > > >> > > server's >> > > > >> > > > > defaults >> > > > >> > > > > we should implement it as separate feature, and it >> should not >> > > be a >> > > > >> > > > default >> > > > >> > > > > behaviour for client, user should explicitly state that >> they >> > > want >> > > > >> this >> > > > >> > > > > behaviour, >> > > > >> > > > > so it won't be unexpected for them. >> > > > >> > > > > >> > > > >> > > > > 3. "Flags" field looks like a good solution to me. >> > > > >> > > > > >> > > > >> > > > > Best Regards, >> > > > >> > > > > Igor >> > > > >> > > > > >> > > > >> > > > > >> > > > >> > > > > On Mon, May 20, 2019 at 12:58 PM Alex Plehanov < >> > > > >> > > plehanov.a...@gmail.com> >> > > > >> > > > > wrote: >> > > > >> > > > > >> > > > >> > > > > > Hi, Igor >> > > > >> > > > > > >> > > > >> > > > > > 1. I think it's better to have the ability to configure >> > > > >> transaction >> > > > >> > > > > > parameters (for example configure default timeout for >> all >> > > > >> clients) on >> > > > >> > > > > > server-side, then don't have such ability and always >> use >> > > some >> > > > >> > > > predefined >> > > > >> > > > > > client-side values (which can be different for >> different >> > > client >> > > > >> > > > > > implementations). At least default timeout is more >> server >> > > > >> specific >> > > > >> > > then >> > > > >> > > > > > client specific parameter since it can affect >> server-side >> > > > >> processes >> > > > >> > > > (PME >> > > > >> > > > > > for example). >> > > > >> > > > > > >> > > > >> > > > > > 2. IgniteUuid has 24 bytes length. This tx id needs to >> be >> > > > >> included to >> > > > >> > > > each >> > > > >> > > > > > cache operation under a transaction. And it almost >> will not >> > > > >> simplify >> > > > >> > > > server >> > > > >> > > > > > code. Also, thin clients don't know how to deal with >> > > IgniteUuid >> > > > >> now, >> > > > >> > > > there >> > > > >> > > > > > is no such entity in the protocol, there are no >> described >> > > rules >> > > > >> on >> > > > >> > > how >> > > > >> > > > to >> > > > >> > > > > > convert it to a string. For monitoring/debugging >> purposes we >> > > > >> should >> > > > >> > > > have >> > > > >> > > > > > the same presentation of this entity on server and >> client >> > > > >> sides. I >> > > > >> > > > think if >> > > > >> > > > > > we need to know real tx id on the client side it's >> better to >> > > > >> > > > additionally >> > > > >> > > > > > include this value to OP_TX_START response (we also can >> > > > >> serialize it >> > > > >> > > > as a >> > > > >> > > > > > string to avoid introducing new entity on client side) >> or >> > > > >> create a >> > > > >> > > new >> > > > >> > > > > > operation to explicitly request tx id (for example >> > > OP_TX_INFO). >> > > > >> > > > > > >> > > > >> > > > > > 3. Make sense, we can reuse deprecated "flags" field >> > > > >> (undeprecate >> > > > >> > > it), >> > > > >> > > > > > which is included now to each cache operation. >> > > > >> > > > > > >> > > > >> > > > > > >> > > > >> > > > > > пт, 17 мая 2019 г. в 18:49, Igor Sapego < >> isap...@apache.org >> > > >: >> > > > >> > > > > > >> > > > >> > > > > > > Hi, >> > > > >> > > > > > > >> > > > >> > > > > > > I had a look at IEP and have several comments: >> > > > >> > > > > > > >> > > > >> > > > > > > 1. Why would one want to use to use server's default >> > > values >> > > > >> for >> > > > >> > > > > > Concurrency >> > > > >> > > > > > > or Isolation? >> > > > >> > > > > > > I believe, client should have its own defaults which >> > > should be >> > > > >> > > > explicitly >> > > > >> > > > > > > documented, so that >> > > > >> > > > > > > behaviour of transactions will not depend on the >> server >> > > node >> > > > >> it was >> > > > >> > > > > > routed >> > > > >> > > > > > > to. The same goes >> > > > >> > > > > > > for timeout. >> > > > >> > > > > > > >> > > > >> > > > > > > 2. Not sure about transaction ID represented by int. >> Why >> > > not >> > > > >> to use >> > > > >> > > > > > > IgniteUuid? It should simplify >> > > > >> > > > > > > server code. Also it may help with >> monitoring/debugging if >> > > > >> thin >> > > > >> > > > clients >> > > > >> > > > > > and >> > > > >> > > > > > > server nodes use the >> > > > >> > > > > > > same identifier for transactions. It does not seem >> as a >> > > big >> > > > >> > > overhead >> > > > >> > > > to >> > > > >> > > > > > me >> > > > >> > > > > > > either. >> > > > >> > > > > > > >> > > > >> > > > > > > 3. Maybe it makes sense to add "In transaction" >> boolean >> > > flag >> > > > >> to >> > > > >> > > cache >> > > > >> > > > > > > operation request header >> > > > >> > > > > > > to avoid bloating message size in non-affected >> scenarios. >> > > > >> > > > > > > >> > > > >> > > > > > > Best Regards, >> > > > >> > > > > > > Igor >> > > > >> > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > > On Mon, May 13, 2019 at 1:58 PM Alex Plehanov < >> > > > >> > > > plehanov.a...@gmail.com> >> > > > >> > > > > > > wrote: >> > > > >> > > > > > > >> > > > >> > > > > > > > Hi, Ivan. >> > > > >> > > > > > > > >> > > > >> > > > > > > > Thanks for your comments. >> > > > >> > > > > > > > >> > > > >> > > > > > > > 1. Transaction id in thin client protocol it's >> just a tx >> > > > >> counter >> > > > >> > > > for >> > > > >> > > > > > the >> > > > >> > > > > > > > current connection. It's not related to >> > > GridCacheVersion. >> > > > >> If we >> > > > >> > > > want to >> > > > >> > > > > > > > know GridCacheVersion on the client side, I think >> we >> > > should >> > > > >> > > > introduce a >> > > > >> > > > > > > new >> > > > >> > > > > > > > type of operation (for example OP_TX_INFO). >> > > > >> > > > > > > > 2. Error handling is already provided by thin >> client >> > > > >> protocol, >> > > > >> > > > even in >> > > > >> > > > > > > case >> > > > >> > > > > > > > of empty response. Of course, the client will know >> if >> > > there >> > > > >> is a >> > > > >> > > > > > failure >> > > > >> > > > > > > > occurred during OP_TX_END operation. >> > > > >> > > > > > > > 3. AFAIK some of thin client implementations >> already >> > > send >> > > > >> > > requests >> > > > >> > > > and >> > > > >> > > > > > > > process responses in an async way (.NET for >> example). As >> > > > >> for java >> > > > >> > > > thin >> > > > >> > > > > > > > client, in the current implementation channel is >> locked >> > > > >> > > exclusively >> > > > >> > > > > > > before >> > > > >> > > > > > > > request send and until the response is processed. >> I have >> > > > >> some >> > > > >> > > ideas >> > > > >> > > > > > about >> > > > >> > > > > > > > how to fix this (split send/receive process into >> two >> > > > >> different >> > > > >> > > > parts >> > > > >> > > > > > and >> > > > >> > > > > > > > acquire locks for this parts separately or create >> > > futures on >> > > > >> > > > request >> > > > >> > > > > > sent >> > > > >> > > > > > > > and complete it after processing the response in a >> > > dedicated >> > > > >> > > > thread), >> > > > >> > > > > > > I've >> > > > >> > > > > > > > created ticket [1] for this issue and will try to >> > > implement >> > > > >> > > > prototype >> > > > >> > > > > > in >> > > > >> > > > > > > a >> > > > >> > > > > > > > couple of days. >> > > > >> > > > > > > > >> > > > >> > > > > > > > About suspend/resume, yes, on server-side we should >> > > resume >> > > > >> tx >> > > > >> > > > before >> > > > >> > > > > > each >> > > > >> > > > > > > > transactional cache operation and suspend the tx >> after >> > > the >> > > > >> > > > operation. >> > > > >> > > > > > In >> > > > >> > > > > > > my >> > > > >> > > > > > > > opinion, suspend/resume approach have several >> advantages >> > > > >> over >> > > > >> > > > approach >> > > > >> > > > > > > with >> > > > >> > > > > > > > explicit tx id argument: >> > > > >> > > > > > > > - Introducing explicit tx id argument for cache >> > > operations >> > > > >> leads >> > > > >> > > > to a >> > > > >> > > > > > > > significant API change >> > > > >> > > > > > > > - It's not clear how to use it together with >> current >> > > > >> > > > (tx-per-thread) >> > > > >> > > > > > > > approach (for example, what if a thread is already >> held >> > > > >> > > > transaction and >> > > > >> > > > > > > > someone call cache operation with explicit tx id?) >> > > > >> > > > > > > > - Suspend/resume feature will also be useful for >> thick >> > > > >> clients >> > > > >> > > > > > > > - Suspend/resume functionality is already partially >> > > > >> implemented >> > > > >> > > > (for >> > > > >> > > > > > > > optimistic transactions only) >> > > > >> > > > > > > > >> > > > >> > > > > > > > [1] >> https://issues.apache.org/jira/browse/IGNITE-11685 >> > > > >> > > > > > > > >> > > > >> > > > > > > > пт, 3 мая 2019 г. в 08:10, Павлухин Иван < >> > > > >> vololo...@gmail.com>: >> > > > >> > > > > > > > >> > > > >> > > > > > > > > Hi Alex, >> > > > >> > > > > > > > > >> > > > >> > > > > > > > > I went through IEP [1] and I have a couple of >> > > questions: >> > > > >> > > > > > > > > 1. What is going to be used as transaction id? >> In a >> > > > >> described >> > > > >> > > > > > protocol >> > > > >> > > > > > > > > I see an int field for it. Should not it be >> > > > >> GridCacheVersion >> > > > >> > > > > > > > > corresponding to IgniteInternalTx#xidVersion? >> > > > >> > > > > > > > > 2. OP_TX_END message assumes an empty response, >> but I >> > > > >> think >> > > > >> > > that >> > > > >> > > > > > > > > errors during tx finish are possible and should >> be >> > > > >> returned in >> > > > >> > > a >> > > > >> > > > > > > > > response. >> > > > >> > > > > > > > > 3. In IEP it is stated that async processing of >> lock >> > > > >> operations >> > > > >> > > > > > should >> > > > >> > > > > > > > > be introduced on a client side to enable >> concurrent >> > > > >> operations >> > > > >> > > > from >> > > > >> > > > > > > > > different client threads. Do you have an idea >> how to >> > > > >> achieve >> > > > >> > > it? >> > > > >> > > > > > > > > >> > > > >> > > > > > > > > Also, a bit about a suspend/resume trait. I >> tried to >> > > think >> > > > >> > > about >> > > > >> > > > it >> > > > >> > > > > > > > > leaving away an existing transactions >> implementation >> > > in >> > > > >> Ignite. >> > > > >> > > > As I >> > > > >> > > > > > > > > understood we are going to resume a tx before >> each >> > > cache >> > > > >> > > > operation in >> > > > >> > > > > > > > > the tx and resume the tx after the operation. All >> > > this to >> > > > >> make >> > > > >> > > an >> > > > >> > > > > > > > > executing thread available for other operations >> (e.g. >> > > in >> > > > >> other >> > > > >> > > > txs). >> > > > >> > > > > > > > > From the first glance it seems like an inversed >> > > logic. A >> > > > >> > > > > > > > > straightforward way is to execute a cache >> operation >> > > > >> within a >> > > > >> > > > > > > > > particular transaction defined as an explicit tx >> id >> > > > >> argument >> > > > >> > > > (e.g. >> > > > >> > > > > > > > > cache.put(key, value, txid)). Can we do so? >> > > > >> > > > > > > > > >> > > > >> > > > > > > > > And leaving for now thin client API. I cannot say >> > > that one >> > > > >> > > > proposed >> > > > >> > > > > > in >> > > > >> > > > > > > > > IEP is good or bad. I can only say that it >> ressembles >> > > > >> current >> > > > >> > > > thick >> > > > >> > > > > > > > > client API. And perhaps it should not. I think >> that we >> > > > >> should >> > > > >> > > > > > consider >> > > > >> > > > > > > > > similar APIs provided by other vendors and keep >> in >> > > mind >> > > > >> that we >> > > > >> > > > have >> > > > >> > > > > > a >> > > > >> > > > > > > > > bunch of client implementations for different >> > > languages. I >> > > > >> > > > suppose >> > > > >> > > > > > > > > that we can return to it a little bit later. And >> I >> > > hope >> > > > >> that we >> > > > >> > > > will >> > > > >> > > > > > > > > do it. >> > > > >> > > > > > > > > >> > > > >> > > > > > > > > [1] >> > > > >> > > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > >> > > > >> > > > >> > > > >> > > >> > > > >> >> > > >> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support >> > > > >> > > > > > > > > >> > > > >> > > > > > > > > вт, 30 апр. 2019 г. в 13:24, Alex Plehanov < >> > > > >> > > > plehanov.a...@gmail.com >> > > > >> > > > > > >: >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > > Hello, Igniters! >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > > I've update IEP [1] and implement PoC >> according to >> > > new >> > > > >> > > approach >> > > > >> > > > > > > > (multiple >> > > > >> > > > > > > > > > concurrent transactions per connection). >> > > > >> > > > > > > > > > But to move forward another feature need to be >> > > > >> implemented: >> > > > >> > > > > > > > > suspend/resume >> > > > >> > > > > > > > > > for pessimistic transactions (IGNITE-5714 [2]). >> > > > >> > > Implementation >> > > > >> > > > of >> > > > >> > > > > > > > > > suspend/resume is ready now and ticket in >> 'Patch >> > > > >> available' >> > > > >> > > > status. >> > > > >> > > > > > > Can >> > > > >> > > > > > > > > any >> > > > >> > > > > > > > > > transactions expert help with review of >> IGNITE-5714? >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > > [1]: >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > >> > > > >> > > > >> > > > >> > > >> > > > >> >> > > >> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support >> > > > >> > > > > > > > > > [2]: >> > > https://issues.apache.org/jira/browse/IGNITE-5714 >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > > чт, 4 апр. 2019 г. в 11:32, Alex Plehanov < >> > > > >> > > > plehanov.a...@gmail.com >> > > > >> > > > > > >: >> > > > >> > > > > > > > > > >> > > > >> > > > > > > > > > > Vladimir, >> > > > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > Ok, then I will rewrite IEP in the near >> future. >> > > > >> > > > > > > > > > > >> > > > >> > > > > > > > > > > чт, 4 апр. 2019 г. в 11:14, Vladimir Ozerov < >> > > > >> > > > > > voze...@gridgain.com >> > > > >> > > > > > > >: >> > > > >> > > > > > > > > > > >> > > > >> > > > > > > > > > >> Hi Alex, >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> I think we should be able to handle many >> > > transactions >> > > > >> > > > through a >> > > > >> > > > > > > > single >> > > > >> > > > > > > > > > >> connection. This will make our protocol and >> > > client >> > > > >> > > > > > implementations >> > > > >> > > > > > > > > much >> > > > >> > > > > > > > > > >> more efficient, and simplicity from >> developer's >> > > > >> > > perspective >> > > > >> > > > is >> > > > >> > > > > > not >> > > > >> > > > > > > > our >> > > > >> > > > > > > > > > >> goal. Consider normal nodes. We have server >> > > nodes and >> > > > >> > > client >> > > > >> > > > > > > nodes. >> > > > >> > > > > > > > > You >> > > > >> > > > > > > > > > >> may >> > > > >> > > > > > > > > > >> span whatever number of transactions you >> need, >> > > but >> > > > >> all of >> > > > >> > > > them >> > > > >> > > > > > are >> > > > >> > > > > > > > > > >> coordinated through a single connection. >> The same >> > > > >> should >> > > > >> > > be >> > > > >> > > > > > > > > applicable to >> > > > >> > > > > > > > > > >> thin clients. Protocol is already designed >> to >> > > handle >> > > > >> this, >> > > > >> > > > as we >> > > > >> > > > > > > > pass >> > > > >> > > > > > > > > > >> unique operation ID in order to distinguish >> one >> > > > >> operation >> > > > >> > > > from >> > > > >> > > > > > > > > another. It >> > > > >> > > > > > > > > > >> is true, though, that we will have to >> introduce a >> > > > >> kind of >> > > > >> > > > > > > "session" >> > > > >> > > > > > > > > > >> concept, and pass additional identifier >> along >> > > with >> > > > >> cache >> > > > >> > > > > > > operations, >> > > > >> > > > > > > > > but >> > > > >> > > > > > > > > > >> this doesn't sound like a problem to me. >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> And provided that currently server-side >> > > transactions >> > > > >> are >> > > > >> > > > bound >> > > > >> > > > > > to >> > > > >> > > > > > > > > threads >> > > > >> > > > > > > > > > >> artificially, I would say that the first >> step in >> > > > >> > > > implementation >> > > > >> > > > > > of >> > > > >> > > > > > > > > > >> transactions on thin clients should be >> decoupling >> > > > >> > > > server-side >> > > > >> > > > > > > > > transactions >> > > > >> > > > > > > > > > >> from threads. Without this we will have very >> > > > >> inefficient >> > > > >> > > > > > > > > implementation, >> > > > >> > > > > > > > > > >> when every new client transaction have to >> spawn >> > > a new >> > > > >> > > > thread. >> > > > >> > > > > > This >> > > > >> > > > > > > > is >> > > > >> > > > > > > > > slow >> > > > >> > > > > > > > > > >> and introduces high memory pressure on a >> cluster >> > > > >> node. We >> > > > >> > > > > > already >> > > > >> > > > > > > > work >> > > > >> > > > > > > > > > >> this >> > > > >> > > > > > > > > > >> way for MVCC transactions which are spawned >> from >> > > JDBC >> > > > >> > > > driver, >> > > > >> > > > > > and >> > > > >> > > > > > > > > believe >> > > > >> > > > > > > > > > >> me, we do not want to replicated this bad >> > > practice to >> > > > >> > > other >> > > > >> > > > > > > clients >> > > > >> > > > > > > > > :-) >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> Vladimir. >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> On Thu, Apr 4, 2019 at 10:08 AM Alex >> Plehanov < >> > > > >> > > > > > > > > plehanov.a...@gmail.com> >> > > > >> > > > > > > > > > >> wrote: >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > > >> > Guys, so, do we need multiple concurrent >> > > > >> transactions >> > > > >> > > per >> > > > >> > > > > > > > > connection? >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > There are pros and cons for each approach. >> > > > >> Difference >> > > > >> > > > between >> > > > >> > > > > > > > > > >> approaches: >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > One transaction at a time per connection: >> > > > >> > > > > > > > > > >> > - This approach is used in RDBMS world >> and >> > > users >> > > > >> got >> > > > >> > > > used to >> > > > >> > > > > > it >> > > > >> > > > > > > > > > >> > - To use transactions concurrently users >> need >> > > to >> > > > >> use >> > > > >> > > > > > different >> > > > >> > > > > > > > > > >> connections >> > > > >> > > > > > > > > > >> > and get these connections via something >> like a >> > > > >> > > connection >> > > > >> > > > pool >> > > > >> > > > > > > > > > >> > - Easy to implement (in fact, PoC is >> already >> > > done) >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > Multiple concurrent transactions per >> > > connection: >> > > > >> > > > > > > > > > >> > - At least for java thin client, we can >> > > implement >> > > > >> > > > transaction >> > > > >> > > > > > > per >> > > > >> > > > > > > > > > >> thread >> > > > >> > > > > > > > > > >> > approach as implemented now for the thick >> > > client >> > > > >> > > (perhaps >> > > > >> > > > > > other >> > > > >> > > > > > > > thin >> > > > >> > > > > > > > > > >> > clients can implement the same >> abstraction) >> > > > >> > > > > > > > > > >> > - There is also protocol change for all >> cache >> > > > >> > > operations >> > > > >> > > > > > needed >> > > > >> > > > > > > > (to >> > > > >> > > > > > > > > > >> bind >> > > > >> > > > > > > > > > >> > cache operation to the transaction) >> > > > >> > > > > > > > > > >> > - Significant changes to all implemented >> > > clients >> > > > >> are >> > > > >> > > > needed >> > > > >> > > > > > > > > > >> > - Implementation on the server side is >> more >> > > > >> complex >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > What do you think? >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > вт, 2 апр. 2019 г. в 16:29, Alex Plehanov >> < >> > > > >> > > > > > > > plehanov.a...@gmail.com >> > > > >> > > > > > > > > >: >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> > > Ilya, >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > > > We should be able to multiplex several >> > > > >> transactions >> > > > >> > > > using >> > > > >> > > > > > a >> > > > >> > > > > > > > > single >> > > > >> > > > > > > > > > >> > > Client connection. >> > > > >> > > > > > > > > > >> > > In this case, we should significantly >> change >> > > > >> cache >> > > > >> > > > > > operations >> > > > >> > > > > > > > > syntax >> > > > >> > > > > > > > > > >> (for >> > > > >> > > > > > > > > > >> > > each implemented client), to bind each >> > > operation >> > > > >> to >> > > > >> > > the >> > > > >> > > > > > > > > transaction. >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > > > I want to also ask if "Number of >> entries >> > > > >> > > > participating in >> > > > >> > > > > > > > > > >> transaction >> > > > >> > > > > > > > > > >> > > (may be approximate). 0 - default >> value." is >> > > > >> needed. >> > > > >> > > > > > > > > > >> > > I've tried to minimize API changes >> between >> > > thick >> > > > >> and >> > > > >> > > > thin >> > > > >> > > > > > > client >> > > > >> > > > > > > > > to >> > > > >> > > > > > > > > > >> > > simplify move from one to another. It's >> the >> > > only >> > > > >> > > reason. >> > > > >> > > > > > But I >> > > > >> > > > > > > > > agree >> > > > >> > > > > > > > > > >> with >> > > > >> > > > > > > > > > >> > > you, the parameter is not very useful. >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > > вт, 2 апр. 2019 г. в 14:48, Ilya >> Kasnacheev < >> > > > >> > > > > > > > > > >> ilya.kasnach...@gmail.com>: >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > >> Hello! >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> Pavel, I agree with you thorougly. We >> > > should be >> > > > >> able >> > > > >> > > to >> > > > >> > > > > > > > multiplex >> > > > >> > > > > > > > > > >> > several >> > > > >> > > > > > > > > > >> > >> transactions using a single Client >> > > connection. >> > > > >> This >> > > > >> > > > means >> > > > >> > > > > > > > adding >> > > > >> > > > > > > > > > >> > >> Transaction id parameter to every >> affected >> > > cache >> > > > >> > > > operation >> > > > >> > > > > > / >> > > > >> > > > > > > > SQL >> > > > >> > > > > > > > > > >> > statement >> > > > >> > > > > > > > > > >> > >> (if applicable) to make sure we do >> cache >> > > > >> operations >> > > > >> > > on >> > > > >> > > > > > > relevant >> > > > >> > > > > > > > > > >> > >> transaction. >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> This is how other things work in >> Ignite, >> > > such as >> > > > >> > > > > > > communication. >> > > > >> > > > > > > > > We do >> > > > >> > > > > > > > > > >> > not >> > > > >> > > > > > > > > > >> > >> open dozens of connections, we >> multiplex >> > > > >> operations >> > > > >> > > > > > > > > asynchronously >> > > > >> > > > > > > > > > >> > through >> > > > >> > > > > > > > > > >> > >> a single connection. >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> I think that trying to pool Ignite >> > > connections >> > > > >> will >> > > > >> > > be >> > > > >> > > > > > highly >> > > > >> > > > > > > > > > >> > >> inconvenient, >> > > > >> > > > > > > > > > >> > >> since there is no existing >> infrastructure >> > > for >> > > > >> such >> > > > >> > > > pooling >> > > > >> > > > > > > > (like >> > > > >> > > > > > > > > > >> there >> > > > >> > > > > > > > > > >> > >> exists for JDBC). >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> I want to also ask if "Number of >> entries >> > > > >> > > participating >> > > > >> > > > in >> > > > >> > > > > > > > > transaction >> > > > >> > > > > > > > > > >> > (may >> > > > >> > > > > > > > > > >> > >> be approximate). 0 - default value." is >> > > needed. >> > > > >> Does >> > > > >> > > it >> > > > >> > > > > > > > actually >> > > > >> > > > > > > > > do >> > > > >> > > > > > > > > > >> > >> anything in our tx protocol? Users of >> > > existing >> > > > >> APIs >> > > > >> > > are >> > > > >> > > > > > > already >> > > > >> > > > > > > > > > >> confused >> > > > >> > > > > > > > > > >> > >> by >> > > > >> > > > > > > > > > >> > >> this parameter, if we could get rid of >> it in >> > > > >> thin >> > > > >> > > > client >> > > > >> > > > > > > > > protocol it >> > > > >> > > > > > > > > > >> > would >> > > > >> > > > > > > > > > >> > >> be nice clean-up. >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> Regards, >> > > > >> > > > > > > > > > >> > >> -- >> > > > >> > > > > > > > > > >> > >> Ilya Kasnacheev >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> вт, 2 апр. 2019 г. в 09:55, Pavel >> Tupitsyn < >> > > > >> > > > > > > > ptupit...@apache.org >> > > > >> > > > > > > > > >: >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> > Alex, >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > > now we can only support one active >> > > > >> transaction >> > > > >> > > per >> > > > >> > > > > > > > connection >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > I totally understand server-side and >> > > protocol >> > > > >> > > > limitations >> > > > >> > > > > > > > that >> > > > >> > > > > > > > > are >> > > > >> > > > > > > > > > >> > >> causing >> > > > >> > > > > > > > > > >> > >> > this. >> > > > >> > > > > > > > > > >> > >> > But I have no idea how to support >> this in >> > > > >> .NET Thin >> > > > >> > > > > > Client, >> > > > >> > > > > > > > for >> > > > >> > > > > > > > > > >> > example. >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > It is thread-safe and can handle >> multiple >> > > > >> async >> > > > >> > > > > > operations >> > > > >> > > > > > > in >> > > > >> > > > > > > > > > >> > parallel. >> > > > >> > > > > > > > > > >> > >> > But with TX support we have to >> somehow >> > > switch >> > > > >> to >> > > > >> > > > > > > > > single-threaded >> > > > >> > > > > > > > > > >> mode >> > > > >> > > > > > > > > > >> > to >> > > > >> > > > > > > > > > >> > >> > avoid unexpected effects. >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > Any ideas? >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > On Mon, Apr 1, 2019 at 6:38 PM Alex >> > > Plehanov < >> > > > >> > > > > > > > > > >> plehanov.a...@gmail.com >> > > > >> > > > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > >> > wrote: >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> > > Dmitriy, thank you! >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > Guys, I've created the IEP [1] on >> wiki, >> > > > >> please >> > > > >> > > > have a >> > > > >> > > > > > > look. >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > [1] >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > >> > > > >> > > > > > > > > > >> > >> >> > > > >> > > > > > > > > > >> > >> > > > >> > > > > > > > > > >> >> > > > >> > > > > > > > > >> > > > >> > > > > > > > >> > > > >> > > > > > > >> > > > >> > > > > > >> > > > >> > > > >> > > > >> > > >> > > > >> >> > > >> https://cwiki.apache.org/confluence/display/IGNITE/IEP-34+Thin+client%3A+transactions+support >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > чт, 28 мар. 2019 г. в 14:33, >> Dmitriy >> > > Pavlov >> > > > >> < >> > > > >> > > > > > > > > dpav...@apache.org >> > > > >> > > > > > > > > > >> >: >> > > > >> > > > > > > > > > >> > >> > > >> > > > >> > > > > > > > > > >> > >> > > > Hi, >> > > > >> > > > > > > > > > >> > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > I've added permissions to account >> > > > >> plehanov.alex >> > > > >> > > > > > > > > > >> > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > Recently Infra integrated Apache >> LDAP >> > > with >> > > > >> > > > > > confluence, >> > > > >> > > > > > > so >> > > > >> > > > > > > > > it is >> > > > >> > > > > > > > > > >> > >> > possible >> > > > >> > > > > > > > > > >> > >> > > to >> > > > >> > > > > > > > > > >> > >> > > > login using Apache credentials. >> > > Probably >> > > > >> we can >> > > > >> > > > ask >> > > > >> > > > > > > infra >> > > > >> > > > > > > > > if >> > > > >> > > > > > > > > > >> extra >> > > > >> > > > > > > > > > >> > >> > > > permissions to edit pages should >> be >> > > added >> > > > >> for >> > > > >> > > > > > > committers. >> > > > >> > > > > > > > > > >> > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > Sincerely, >> > > > >> > > > > > > > > > >> > >> > > > Dmitriy Pavlov >> > > > >> > > > > > > > > > >> > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > ср, 27 мар. 2019 г. в 13:37, Alex >> > > > >> Plehanov < >> > > > >> > > > > > > > > > >> > plehanov.a...@gmail.com >> > > > >> > > > > > > > > > >> > >> >: >> > > > >> > > > > > > > > > >> > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > > Vladimir, >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > About current tx: ok, then we >> don't >> > > > >> need tx() >> > > > >> > > > > > method >> > > > >> > > > > > > in >> > > > >> > > > > > > > > the >> > > > >> > > > > > > > > > >> > >> interface >> > > > >> > > > > > > > > > >> > >> > > at >> > > > >> > > > > > > > > > >> > >> > > > > all (the same cached >> transaction >> > > info >> > > > >> user >> > > > >> > > can >> > > > >> > > > > > store >> > > > >> > > > > > > by >> > > > >> > > > > > > > > > >> > himself). >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > About decoupling transactions >> from >> > > > >> threads on >> > > > >> > > > the >> > > > >> > > > > > > > server >> > > > >> > > > > > > > > > >> side: >> > > > >> > > > > > > > > > >> > for >> > > > >> > > > > > > > > > >> > >> > now, >> > > > >> > > > > > > > > > >> > >> > > > we >> > > > >> > > > > > > > > > >> > >> > > > > can start with >> thread-per-connection >> > > > >> approach >> > > > >> > > > (we >> > > > >> > > > > > > only >> > > > >> > > > > > > > > can >> > > > >> > > > > > > > > > >> > support >> > > > >> > > > > > > > > > >> > >> > one >> > > > >> > > > > > > > > > >> > >> > > > > active transaction per >> connection, >> > > see >> > > > >> below, >> > > > >> > > > so we >> > > > >> > > > > > > > need >> > > > >> > > > > > > > > one >> > > > >> > > > > > > > > > >> > >> > additional >> > > > >> > > > > > > > > > >> > >> > > > > dedicated thread for each >> connection >> > > > >> with >> > > > >> > > > active >> > > > >> > > > > > > > > > >> transaction), >> > > > >> > > > > > > > > > >> > and >> > > > >> > > > > > > > > > >> > >> > > later >> > > > >> > > > > > > > > > >> > >> > > > > change server-side internals to >> > > process >> > > > >> > > client >> > > > >> > > > > > > > > transactions >> > > > >> > > > > > > > > > >> in >> > > > >> > > > > > > > > > >> > any >> > > > >> > > > > > > > > > >> > >> > > server >> > > > >> > > > > > > > > > >> > >> > > > > thread (not dedicated to this >> > > > >> connection). >> > > > >> > > This >> > > > >> > > > > > > change >> > > > >> > > > > > > > > will >> > > > >> > > > > > > > > > >> not >> > > > >> > > > > > > > > > >> > >> > affect >> > > > >> > > > > > > > > > >> > >> > > > the >> > > > >> > > > > > > > > > >> > >> > > > > thin client protocol, it only >> > > affects >> > > > >> the >> > > > >> > > > server >> > > > >> > > > > > > side. >> > > > >> > > > > > > > > > >> > >> > > > > In any case, we can't support >> > > concurrent >> > > > >> > > > > > transactions >> > > > >> > > > > > > > per >> > > > >> > > > > > > > > > >> > >> connection >> > > > >> > > > > > > > > > >> > >> > on >> > > > >> > > > > > > > > > >> > >> > > > > the client side without >> fundamental >> > > > >> changes >> > > > >> > > to >> > > > >> > > > the >> > > > >> > > > > > > > > current >> > > > >> > > > > > > > > > >> > >> protocol >> > > > >> > > > > > > > > > >> > >> > > > (cache >> > > > >> > > > > > > > > > >> > >> > > > > operation doesn't bound to >> > > transaction >> > > > >> or >> > > > >> > > > thread >> > > > >> > > > > > and >> > > > >> > > > > > > > the >> > > > >> > > > > > > > > > >> server >> > > > >> > > > > > > > > > >> > >> > doesn't >> > > > >> > > > > > > > > > >> > >> > > > > know which thread on the client >> > > side do >> > > > >> this >> > > > >> > > > cache >> > > > >> > > > > > > > > > >> operation). >> > > > >> > > > > > > > > > >> > In >> > > > >> > > > > > > > > > >> > >> my >> > > > >> > > > > > > > > > >> > >> > > > > opinion, if a user wants to use >> > > > >> concurrent >> > > > >> > > > > > > > transactions, >> > > > >> > > > > > > > > he >> > > > >> > > > > > > > > > >> must >> > > > >> > > > > > > > > > >> > >> use >> > > > >> > > > > > > > > > >> > >> > > > > different connections from a >> > > connection >> > > > >> pool. >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > About semantics of >> suspend/resume >> > > on the >> > > > >> > > > > > client-side: >> > > > >> > > > > > > > > it's >> > > > >> > > > > > > > > > >> > >> absolutely >> > > > >> > > > > > > > > > >> > >> > > > > different than server-side >> > > semantics (we >> > > > >> > > don't >> > > > >> > > > need >> > > > >> > > > > > > to >> > > > >> > > > > > > > do >> > > > >> > > > > > > > > > >> > >> > > suspend/resume >> > > > >> > > > > > > > > > >> > >> > > > to >> > > > >> > > > > > > > > > >> > >> > > > > pass transaction between >> threads on >> > > the >> > > > >> > > > > > client-side), >> > > > >> > > > > > > > but >> > > > >> > > > > > > > > > >> can't >> > > > >> > > > > > > > > > >> > be >> > > > >> > > > > > > > > > >> > >> > > > > implemented efficiently without >> > > > >> implemented >> > > > >> > > > > > > > > suspend/resume on >> > > > >> > > > > > > > > > >> > >> > > > server-side. >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > Can anyone give me permissions >> to >> > > > >> create IEP >> > > > >> > > on >> > > > >> > > > > > > Apache >> > > > >> > > > > > > > > wiki? >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > ср, 27 мар. 2019 г. в 11:59, >> > > Vladimir >> > > > >> Ozerov >> > > > >> > > < >> > > > >> > > > > > > > > > >> > >> voze...@gridgain.com>: >> > > > >> > > > > > > > > > >> > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Hi Alex, >> > > > >> > > > > > > > > > >> > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > My comments was only about >> the >> > > > >> protocol. >> > > > >> > > > Getting >> > > > >> > > > > > > > > current >> > > > >> > > > > > > > > > >> info >> > > > >> > > > > > > > > > >> > >> about >> > > > >> > > > > > > > > > >> > >> > > > > > transaction should be >> handled by >> > > the >> > > > >> client >> > > > >> > > > > > itself. >> > > > >> > > > > > > > It >> > > > >> > > > > > > > > is >> > > > >> > > > > > > > > > >> not >> > > > >> > > > > > > > > > >> > >> > > protocl's >> > > > >> > > > > > > > > > >> > >> > > > > > concern. Same about other >> APIs and >> > > > >> behavior >> > > > >> > > > in >> > > > >> > > > > > case >> > > > >> > > > > > > > > another >> > > > >> > > > > > > > > > >> > >> > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > is >> > > > >> > > > > > > > > > >> > >> > > > > > attempted from the same >> thread. >> > > > >> > > > > > > > > > >> > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Putting protocol aside, >> > > transaction >> > > > >> support >> > > > >> > > > is >> > > > >> > > > > > > > > complicated >> > > > >> > > > > > > > > > >> > >> matter. >> > > > >> > > > > > > > > > >> > >> > I >> > > > >> > > > > > > > > > >> > >> > > > > would >> > > > >> > > > > > > > > > >> > >> > > > > > propose to route through IEP >> and >> > > wide >> > > > >> > > > community >> > > > >> > > > > > > > > > >> discussion. We >> > > > >> > > > > > > > > > >> > >> need >> > > > >> > > > > > > > > > >> > >> > > to >> > > > >> > > > > > > > > > >> > >> > > > > > review API and semantics very >> > > > >> carefully, >> > > > >> > > > taking >> > > > >> > > > > > > > > > >> SUSPEND/RESUME >> > > > >> > > > > > > > > > >> > >> in >> > > > >> > > > > > > > > > >> > >> > > > count. >> > > > >> > > > > > > > > > >> > >> > > > > > Also I do not see how we >> support >> > > > >> client >> > > > >> > > > > > > transactions >> > > > >> > > > > > > > > > >> > efficiently >> > > > >> > > > > > > > > > >> > >> > > > without >> > > > >> > > > > > > > > > >> > >> > > > > > decoupling transactions from >> > > threads >> > > > >> on the >> > > > >> > > > > > server >> > > > >> > > > > > > > side >> > > > >> > > > > > > > > > >> first. >> > > > >> > > > > > > > > > >> > >> > > Because >> > > > >> > > > > > > > > > >> > >> > > > > > without it you will need a >> > > dedicated >> > > > >> server >> > > > >> > > > > > thread >> > > > >> > > > > > > > for >> > > > >> > > > > > > > > > >> every >> > > > >> > > > > > > > > > >> > >> > client's >> > > > >> > > > > > > > > > >> > >> > > > > > transaction which is slow >> and may >> > > even >> > > > >> > > crash >> > > > >> > > > the >> > > > >> > > > > > > > > server. >> > > > >> > > > > > > > > > >> > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > Vladimir. >> > > > >> > > > > > > > > > >> > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > On Wed, Mar 27, 2019 at >> 11:44 AM >> > > Alex >> > > > >> > > > Plehanov < >> > > > >> > > > > > > > > > >> > >> > > > plehanov.a...@gmail.com> >> > > > >> > > > > > > > > > >> > >> > > > > > wrote: >> > > > >> > > > > > > > > > >> > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Vladimir, what if we want >> to get >> > > > >> current >> > > > >> > > > > > > > transaction >> > > > >> > > > > > > > > info >> > > > >> > > > > > > > > > >> > >> (tx() >> > > > >> > > > > > > > > > >> > >> > > > > method)? >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Does close() method mapped >> to >> > > > >> > > > TX_END(rollback)? >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > For example, this code: >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > try(tx = txStart()) { >> > > > >> > > > > > > > > > >> > >> > > > > > > tx.commit(); >> > > > >> > > > > > > > > > >> > >> > > > > > > } >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Will produce: >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_START >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_END(commit) >> > > > >> > > > > > > > > > >> > >> > > > > > > TX_END(rollback) >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > Am I understand you right? >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > About xid. There is yet >> another >> > > > >> proposal. >> > > > >> > > > Use >> > > > >> > > > > > > some >> > > > >> > > > > > > > > unique >> > > > >> > > > > > > > > > >> > per >> > > > >> > > > > > > > > > >> > >> > > > > connection >> > > > >> > > > > > > > > > >> > >> > > > > > id >> > > > >> > > > > > > > > > >> > >> > > > > > > (integer, simple counter) >> for >> > > > >> identifying >> > > > >> > > > the >> > > > >> > > > > > > > > > >> transaction on >> > > > >> > > > > > > > > > >> > >> > > > > > > commit/rollback message. >> The >> > > client >> > > > >> gets >> > > > >> > > > this >> > > > >> > > > > > id >> > > > >> > > > > > > > > from the >> > > > >> > > > > > > > > > >> > >> server >> > > > >> > > > > > > > > > >> > >> > > with >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction info and sends >> it >> > > back >> > > > >> to the >> > > > >> > > > > > server >> > > > >> > > > > > > > when >> > > > >> > > > > > > > > > >> trying >> > > > >> > > > > > > > > > >> > >> to >> > > > >> > > > > > > > > > >> > >> > > > > > > commit/rollback >> transaction. >> > > This >> > > > >> id is >> > > > >> > > not >> > > > >> > > > > > shown >> > > > >> > > > > > > > to >> > > > >> > > > > > > > > > >> users. >> > > > >> > > > > > > > > > >> > >> But >> > > > >> > > > > > > > > > >> > >> > > also >> > > > >> > > > > > > > > > >> > >> > > > we >> > > > >> > > > > > > > > > >> > >> > > > > > can >> > > > >> > > > > > > > > > >> > >> > > > > > > pass from server to client >> real >> > > > >> > > > transaction id >> > > > >> > > > > > > > (xid) >> > > > >> > > > > > > > > with >> > > > >> > > > > > > > > > >> > >> > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > info >> > > > >> > > > > > > > > > >> > >> > > > > > > for diagnostic purposes. >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > And one more question: what >> > > should >> > > > >> we do >> > > > >> > > > if the >> > > > >> > > > > > > > > client >> > > > >> > > > > > > > > > >> > starts >> > > > >> > > > > > > > > > >> > >> a >> > > > >> > > > > > > > > > >> > >> > new >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction without ending >> the >> > > old >> > > > >> one? >> > > > >> > > > Should >> > > > >> > > > > > we >> > > > >> > > > > > > > > end the >> > > > >> > > > > > > > > > >> > old >> > > > >> > > > > > > > > > >> > >> > > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > implicitly (rollback) or >> throw >> > > an >> > > > >> > > > exception to >> > > > >> > > > > > > the >> > > > >> > > > > > > > > > >> client? >> > > > >> > > > > > > > > > >> > In >> > > > >> > > > > > > > > > >> > >> my >> > > > >> > > > > > > > > > >> > >> > > > > opinion, >> > > > >> > > > > > > > > > >> > >> > > > > > > the first option is >> better. For >> > > > >> example, >> > > > >> > > > if we >> > > > >> > > > > > > got >> > > > >> > > > > > > > a >> > > > >> > > > > > > > > > >> > >> previously >> > > > >> > > > > > > > > > >> > >> > > used >> > > > >> > > > > > > > > > >> > >> > > > > > > connection from the >> connection >> > > > >> pool, we >> > > > >> > > > should >> > > > >> > > > > > > not >> > > > >> > > > > > > > > worry >> > > > >> > > > > > > > > > >> > about >> > > > >> > > > > > > > > > >> > >> > any >> > > > >> > > > > > > > > > >> > >> > > > > > > uncompleted transaction >> started >> > > by >> > > > >> the >> > > > >> > > > previous >> > > > >> > > > > > > > user >> > > > >> > > > > > > > > of >> > > > >> > > > > > > > > > >> this >> > > > >> > > > > > > > > > >> > >> > > > > connection. >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > ср, 27 мар. 2019 г. в >> 11:02, >> > > > >> Vladimir >> > > > >> > > > Ozerov < >> > > > >> > > > > > > > > > >> > >> > voze...@gridgain.com >> > > > >> > > > > > > > > > >> > >> > > >: >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > As far as >> > > > >> SUSPEND/RESUME/SAVEPOINT - we >> > > > >> > > > do >> > > > >> > > > > > not >> > > > >> > > > > > > > > support >> > > > >> > > > > > > > > > >> > them >> > > > >> > > > > > > > > > >> > >> > yet, >> > > > >> > > > > > > > > > >> > >> > > > and >> > > > >> > > > > > > > > > >> > >> > > > > > > adding >> > > > >> > > > > > > > > > >> > >> > > > > > > > them in future should not >> > > > >> conflict with >> > > > >> > > > > > simple >> > > > >> > > > > > > > > > >> START/END >> > > > >> > > > > > > > > > >> > >> > > > > > infrastructure. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > On Wed, Mar 27, 2019 at >> 11:00 >> > > AM >> > > > >> > > Vladimir >> > > > >> > > > > > > Ozerov >> > > > >> > > > > > > > < >> > > > >> > > > > > > > > > >> > >> > > > > voze...@gridgain.com >> > > > >> > > > > > > > > > >> > >> > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > wrote: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > Hi Alex, >> > > > >> > > > > > > > > > >> > >> > > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > I am not sure we need 5 >> > > > >> commands. >> > > > >> > > > Wouldn't >> > > > >> > > > > > it >> > > > >> > > > > > > > be >> > > > >> > > > > > > > > > >> enough >> > > > >> > > > > > > > > > >> > to >> > > > >> > > > > > > > > > >> > >> > have >> > > > >> > > > > > > > > > >> > >> > > > > only >> > > > >> > > > > > > > > > >> > >> > > > > > > two? >> > > > >> > > > > > > > > > >> > >> > > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > START - accepts >> optional >> > > > >> parameters, >> > > > >> > > > > > returns >> > > > >> > > > > > > > > > >> transaction >> > > > >> > > > > > > > > > >> > >> info >> > > > >> > > > > > > > > > >> > >> > > > > > > > > END - provides commit >> flag, >> > > > >> returns >> > > > >> > > > void >> > > > >> > > > > > > > > > >> > >> > > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > Vladimir. >> > > > >> > > > > > > > > > >> > >> > > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > On Wed, Mar 27, 2019 at >> > > 8:26 AM >> > > > >> Alex >> > > > >> > > > > > > Plehanov < >> > > > >> > > > > > > > > > >> > >> > > > > > plehanov.a...@gmail.com >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > > wrote: >> > > > >> > > > > > > > > > >> > >> > > > > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> Sergey, yes, the >> close is >> > > > >> something >> > > > >> > > > like >> > > > >> > > > > > > > silent >> > > > >> > > > > > > > > > >> > rollback. >> > > > >> > > > > > > > > > >> > >> > But >> > > > >> > > > > > > > > > >> > >> > > we >> > > > >> > > > > > > > > > >> > >> > > > > can >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> also implement this >> on the >> > > > >> client >> > > > >> > > > side, >> > > > >> > > > > > just >> > > > >> > > > > > > > > using >> > > > >> > > > > > > > > > >> > >> rollback >> > > > >> > > > > > > > > > >> > >> > > and >> > > > >> > > > > > > > > > >> > >> > > > > > > ignoring >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> errors in the >> response. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> ср, 27 мар. 2019 г. в >> > > 00:04, >> > > > >> Sergey >> > > > >> > > > > > Kozlov < >> > > > >> > > > > > > > > > >> > >> > > > skoz...@gridgain.com >> > > > >> > > > > > > > > > >> > >> > > > > >: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Nikolay >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Am I correctly >> > > understand you >> > > > >> > > > points: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > - close: rollback >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > - commit, close: >> do >> > > > >> nothing >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > - rollback, >> close: do >> > > > >> what? (I >> > > > >> > > > > > suppose >> > > > >> > > > > > > > > nothing) >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Also you assume that >> > > after >> > > > >> > > > > > commit/rollback >> > > > >> > > > > > > > we >> > > > >> > > > > > > > > may >> > > > >> > > > > > > > > > >> > need >> > > > >> > > > > > > > > > >> > >> to >> > > > >> > > > > > > > > > >> > >> > > free >> > > > >> > > > > > > > > > >> > >> > > > > > some >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > resources on server >> > > > >> node(s)or just >> > > > >> > > > do on >> > > > >> > > > > > > > > client >> > > > >> > > > > > > > > > >> > started >> > > > >> > > > > > > > > > >> > >> > TX? >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > On Tue, Mar 26, >> 2019 at >> > > > >> 10:41 PM >> > > > >> > > > Alex >> > > > >> > > > > > > > > Plehanov < >> > > > >> > > > > > > > > > >> > >> > > > > > > > plehanov.a...@gmail.com >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > wrote: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > Sergey, we have >> the >> > > close() >> > > > >> > > > method in >> > > > >> > > > > > > the >> > > > >> > > > > > > > > thick >> > > > >> > > > > > > > > > >> > >> client, >> > > > >> > > > > > > > > > >> > >> > > it's >> > > > >> > > > > > > > > > >> > >> > > > > > > > behavior >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> is >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > slightly >> different than >> > > > >> > > rollback() >> > > > >> > > > > > > method >> > > > >> > > > > > > > > (it >> > > > >> > > > > > > > > > >> > should >> > > > >> > > > > > > > > > >> > >> > > > rollback >> > > > >> > > > > > > > > > >> > >> > > > > if >> > > > >> > > > > > > > > > >> > >> > > > > > > the >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > transaction is not >> > > > >> committed and >> > > > >> > > > do >> > > > >> > > > > > > > nothing >> > > > >> > > > > > > > > if >> > > > >> > > > > > > > > > >> the >> > > > >> > > > > > > > > > >> > >> > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > is >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> already >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > committed). I >> think we >> > > > >> should >> > > > >> > > > support >> > > > >> > > > > > > > > > >> > >> try-with-resource >> > > > >> > > > > > > > > > >> > >> > > > > > semantics >> > > > >> > > > > > > > > > >> > >> > > > > > > in >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> the >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > thin client and >> > > > >> OP_TX_CLOSE will >> > > > >> > > > be >> > > > >> > > > > > > useful >> > > > >> > > > > > > > > here. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > Nikolay, >> suspend/resume >> > > > >> didn't >> > > > >> > > > work >> > > > >> > > > > > yet >> > > > >> > > > > > > > for >> > > > >> > > > > > > > > > >> > >> pessimistic >> > > > >> > > > > > > > > > >> > >> > > > > > > > transactions. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > Also, >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > the main goal of >> > > > >> suspend/resume >> > > > >> > > > > > > operations >> > > > >> > > > > > > > > is to >> > > > >> > > > > > > > > > >> > >> support >> > > > >> > > > > > > > > > >> > >> > > > > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > passing between >> > > threads. >> > > > >> In the >> > > > >> > > > thin >> > > > >> > > > > > > > > client, the >> > > > >> > > > > > > > > > >> > >> > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > is >> > > > >> > > > > > > > > > >> > >> > > > > > > > bound >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> to >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > the client >> connection, >> > > not >> > > > >> > > client >> > > > >> > > > > > > thread. >> > > > >> > > > > > > > I >> > > > >> > > > > > > > > > >> think >> > > > >> > > > > > > > > > >> > >> > passing >> > > > >> > > > > > > > > > >> > >> > > a >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > between different >> > > client >> > > > >> > > > connections >> > > > >> > > > > > is >> > > > >> > > > > > > > not >> > > > >> > > > > > > > > a >> > > > >> > > > > > > > > > >> very >> > > > >> > > > > > > > > > >> > >> > useful >> > > > >> > > > > > > > > > >> > >> > > > > case. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > вт, 26 мар. 2019 >> г. в >> > > > >> 22:17, >> > > > >> > > > Nikolay >> > > > >> > > > > > > > > Izhikov < >> > > > >> > > > > > > > > > >> > >> > > > > > nizhi...@apache.org >> > > > >> > > > > > > > > > >> > >> > > > > > > >: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > Hello, Alex. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > We also have >> suspend >> > > and >> > > > >> > > resume >> > > > >> > > > > > > > > operations. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > I think we >> should >> > > > >> support them >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > вт, 26 марта >> 2019 г., >> > > > >> 22:07 >> > > > >> > > > Sergey >> > > > >> > > > > > > > Kozlov >> > > > >> > > > > > > > > < >> > > > >> > > > > > > > > > >> > >> > > > > > skoz...@gridgain.com >> > > > >> > > > > > > > > > >> > >> > > > > > > >: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Hi >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Looks like I >> missed >> > > > >> > > something >> > > > >> > > > but >> > > > >> > > > > > > why >> > > > >> > > > > > > > we >> > > > >> > > > > > > > > > >> need >> > > > >> > > > > > > > > > >> > >> > > > OP_TX_CLOSE >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> operation? >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > Also I >> suggest to >> > > > >> reserve a >> > > > >> > > > code >> > > > >> > > > > > for >> > > > >> > > > > > > > > > >> SAVEPOINT >> > > > >> > > > > > > > > > >> > >> > > operation >> > > > >> > > > > > > > > > >> > >> > > > > > which >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> very >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > useful >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > to understand >> where >> > > > >> > > > transaction >> > > > >> > > > > > has >> > > > >> > > > > > > > been >> > > > >> > > > > > > > > > >> rolled >> > > > >> > > > > > > > > > >> > >> back >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > On Tue, Mar >> 26, >> > > 2019 >> > > > >> at 6:07 >> > > > >> > > > PM >> > > > >> > > > > > Alex >> > > > >> > > > > > > > > > >> Plehanov < >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > >> plehanov.a...@gmail.com >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > wrote: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > Hello >> Igniters! >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > I want to >> pick >> > > up the >> > > > >> > > ticket >> > > > >> > > > > > > > > IGNITE-7369 >> > > > >> > > > > > > > > > >> and >> > > > >> > > > > > > > > > >> > >> add >> > > > >> > > > > > > > > > >> > >> > > > > > > transactions >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > support >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > to >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > our thin >> client >> > > > >> > > > implementation. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > I've looked >> at >> > > our >> > > > >> current >> > > > >> > > > > > > > > implementation >> > > > >> > > > > > > > > > >> and >> > > > >> > > > > > > > > > >> > >> have >> > > > >> > > > > > > > > > >> > >> > > > some >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> proposals >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > to >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > support >> > > transactions: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > Add new >> > > operations >> > > > >> to thin >> > > > >> > > > > > client >> > > > >> > > > > > > > > > >> protocol: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> OP_TX_GET, >> > > 4000, >> > > > >> Get >> > > > >> > > > current >> > > > >> > > > > > > > > > >> transaction >> > > > >> > > > > > > > > > >> > >> for >> > > > >> > > > > > > > > > >> > >> > > > client >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> connection >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> OP_TX_START, >> > > > >> 4001, >> > > > >> > > > Start a >> > > > >> > > > > > new >> > > > >> > > > > > > > > > >> > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> OP_TX_COMMIT, >> > > > >> 4002, >> > > > >> > > > Commit >> > > > >> > > > > > > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > OP_TX_ROLLBACK, >> > > > >> 4003, >> > > > >> > > > > > Rollback >> > > > >> > > > > > > > > > >> > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> OP_TX_CLOSE, >> > > > >> 4004, >> > > > >> > > Close >> > > > >> > > > > > > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > From the >> client >> > > side >> > > > >> > > (java) >> > > > >> > > > new >> > > > >> > > > > > > > > interfaces >> > > > >> > > > > > > > > > >> > >> will be >> > > > >> > > > > > > > > > >> > >> > > > > added: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> interface >> > > > >> > > > > > > ClientTransactions >> > > > >> > > > > > > > { >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > ClientTransaction >> > > > >> > > > > > > > > txStart(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > ClientTransaction >> > > > >> > > > > > > > > > >> > >> > > > > > >> txStart(TransactionConcurrency >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > concurrency, >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > TransactionIsolation >> > > > >> > > > isolation); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > ClientTransaction >> > > > >> > > > > > > > > > >> > >> > > > > > >> txStart(TransactionConcurrency >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > concurrency, >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > TransactionIsolation >> > > > >> > > > isolation, >> > > > >> > > > > > > long >> > > > >> > > > > > > > > > >> timeout, >> > > > >> > > > > > > > > > >> > >> int >> > > > >> > > > > > > > > > >> > >> > > > > txSize); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > ClientTransaction >> > > > >> > > > > > tx(); >> > > > >> > > > > > > > // >> > > > >> > > > > > > > > Get >> > > > >> > > > > > > > > > >> > >> current >> > > > >> > > > > > > > > > >> > >> > > > > > connection >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > transaction >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > > ClientTransactions >> > > > >> > > > > > > > > > >> > withLabel(String >> > > > >> > > > > > > > > > >> > >> > lb); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > } >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> interface >> > > > >> > > > > > ClientTransaction >> > > > >> > > > > > > > > extends >> > > > >> > > > > > > > > > >> > >> > > > > AutoCloseable { >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > IgniteUuid >> > > > >> > > > xid(); // >> > > > >> > > > > > Do >> > > > >> > > > > > > > we >> > > > >> > > > > > > > > need >> > > > >> > > > > > > > > > >> > it? >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > > TransactionIsolation >> > > > >> > > > > > > > > > >> isolation(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> > > > >> > > > > > TransactionConcurrency >> > > > >> > > > > > > > > > >> > >> concurrency(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> long >> > > > >> timeout(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> String >> > > > >> label(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> void >> > > > >> commit(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> void >> > > > >> > > rollback(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > public >> void >> > > > >> close(); >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > } >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > From the >> server >> > > > >> side, I >> > > > >> > > > think >> > > > >> > > > > > as a >> > > > >> > > > > > > > > first >> > > > >> > > > > > > > > > >> step >> > > > >> > > > > > > > > > >> > >> > (while >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> transactions >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> suspend/resume >> > > is not >> > > > >> > > fully >> > > > >> > > > > > > > > implemented) >> > > > >> > > > > > > > > > >> we >> > > > >> > > > > > > > > > >> > can >> > > > >> > > > > > > > > > >> > >> > use >> > > > >> > > > > > > > > > >> > >> > > > the >> > > > >> > > > > > > > > > >> > >> > > > > > same >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > approach >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > as >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > for JDBC: >> add a >> > > new >> > > > >> worker >> > > > >> > > > to >> > > > >> > > > > > each >> > > > >> > > > > > > > > > >> > >> > > > ClientRequestHandler >> > > > >> > > > > > > > > > >> > >> > > > > > and >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> process >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > requests by >> this >> > > > >> worker if >> > > > >> > > > the >> > > > >> > > > > > > > > > >> transaction is >> > > > >> > > > > > > > > > >> > >> > > started >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> explicitly. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > ClientRequestHandler >> > > > >> is >> > > > >> > > > bound to >> > > > >> > > > > > > > > client >> > > > >> > > > > > > > > > >> > >> > connection, >> > > > >> > > > > > > > > > >> > >> > > so >> > > > >> > > > > > > > > > >> > >> > > > > > there >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> will >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > be >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > 1:1 >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > relation >> between >> > > > >> client >> > > > >> > > > > > connection >> > > > >> > > > > > > > and >> > > > >> > > > > > > > > > >> > thread, >> > > > >> > > > > > > > > > >> > >> > which >> > > > >> > > > > > > > > > >> > >> > > > > > process >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > operations >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > in >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > a >> transaction. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > Also, there >> is a >> > > > >> couple of >> > > > >> > > > > > issues >> > > > >> > > > > > > I >> > > > >> > > > > > > > > want >> > > > >> > > > > > > > > > >> to >> > > > >> > > > > > > > > > >> > >> > discuss: >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > We have >> > > overloaded >> > > > >> method >> > > > >> > > > > > txStart >> > > > >> > > > > > > > > with a >> > > > >> > > > > > > > > > >> > >> different >> > > > >> > > > > > > > > > >> > >> > > set >> > > > >> > > > > > > > > > >> > >> > > > > of >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > arguments. >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > Some >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> > > > > > of the >> arguments >> > > may >> > > > >> be >> > > > >> > > > missing. >> > > > >> > > > > > > To >> > > > >> > > > > > > > > pass >> > > > >> > > > > > > > > > >> > >> arguments >> > > > >> > > > > > > > > > >> > >> > > > with >> > > > >> > > > > > > > > > >> > >> > > > > > > > >> OP_TX_START >> > > > >> > > > > > > > > > >> > >> & >> > > > > >> > > > > >> > > >> > > >> > > >> > > -- >> > > Best regards, >> > > Ivan Pavlukhin >> > > >> >> >> >> -- >> Best regards, >> Ivan Pavlukhin >> >