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 >> > > > > > operation we have the next options: >> > > > > > * Serialize full set of arguments and use some value for >> missing >> > > > > > arguments. For example -1 for int/long types and null for string >> > > type. >> > > > We >> > > > > > can't use 0 for int/long types since 0 it's a valid value for >> > > > > concurrency, >> > > > > > isolation and timeout arguments. >> > > > > > * Serialize arguments as a collection of property-value pairs >> > (like >> > > > it's >> > > > > > implemented now for CacheConfiguration). In this case only >> > explicitly >> > > > > > provided arguments will be serialized. >> > > > > > Which way is better? The simplest solution is to use the first >> > option >> > > > > and I >> > > > > > want to use it if there were no objections. >> > > > > > >> > > > > > Do we need transaction id (xid) on the client side? >> > > > > > If yes, we can pass xid along with OP_TX_COMMIT, OP_TX_ROLLBACK, >> > > > > > OP_TX_CLOSE operations back to the server and do additional >> check >> > on >> > > > the >> > > > > > server side (current transaction id for connection == >> transaction >> > id >> > > > > passed >> > > > > > from client side). This, perhaps, will protect clients against >> some >> > > > > errors >> > > > > > (for example when client try to commit outdated transaction). >> But >> > > > > > currently, we don't have data type IgniteUuid in thin client >> > > protocol. >> > > > Do >> > > > > > we need to add it too? >> > > > > > Also, we can pass xid as a string just to inform the client and >> do >> > > not >> > > > > pass >> > > > > > it back to the server with commit/rollback operation. >> > > > > > Or not to pass xid at all (.NET thick client works this way as >> far >> > > as I >> > > > > > know). >> > > > > > >> > > > > > What do you think? >> > > > > > >> > > > > > ср, 7 мар. 2018 г. в 16:22, Vladimir Ozerov < >> voze...@gridgain.com >> > >: >> > > > > > >> > > > > > > We already have transactions support in JDBC driver in TX SQL >> > > branch >> > > > > > > (ignite-4191). Currently it is implemented through separate >> > thread, >> > > > > which >> > > > > > > is not that efficient. Ideally we need to finish decoupling >> > > > > transactions >> > > > > > > from threads. But alternatively we can change the logic on >> how we >> > > > > assign >> > > > > > > thread ID to specific transaction and "impersonate" thin >> client >> > > > worker >> > > > > > > threads when serving requests from multiple users. >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > On Tue, Mar 6, 2018 at 10:01 PM, Denis Magda < >> dma...@apache.org> >> > > > > wrote: >> > > > > > > >> > > > > > > > Here is an original discussion with a reference to the JIRA >> > > ticket: >> > > > > > > > http://apache-ignite-developers.2346864.n4.nabble. >> > > > > > > > com/Re-Transaction-operations-using-the-Ignite-Thin-Client- >> > > > > > > > Protocol-td25914.html >> > > > > > > > >> > > > > > > > -- >> > > > > > > > Denis >> > > > > > > > >> > > > > > > > On Tue, Mar 6, 2018 at 9:18 AM, Dmitriy Setrakyan < >> > > > > > dsetrak...@apache.org >> > > > > > > > >> > > > > > > > wrote: >> > > > > > > > >> > > > > > > > > Hi Dmitriy. I don't think we have a design proposal for >> > > > transaction >> > > > > > > > support >> > > > > > > > > in thin clients. Do you mind taking this initiative and >> > > creating >> > > > an >> > > > > > IEP >> > > > > > > > on >> > > > > > > > > Wiki? >> > > > > > > > > >> > > > > > > > > D. >> > > > > > > > > >> > > > > > > > > On Tue, Mar 6, 2018 at 8:46 AM, Dmitriy Govorukhin < >> > > > > > > > > dmitriy.govoruk...@gmail.com> wrote: >> > > > > > > > > >> > > > > > > > > > Hi, Igniters. >> > > > > > > > > > >> > > > > > > > > > I've seen a lot of discussions about thin client and >> binary >> > > > > > protocol, >> > > > > > > > > but I >> > > > > > > > > > did not hear anything about transactions support. Do we >> > have >> > > > some >> > > > > > > draft >> > > > > > > > > for >> > > > > > > > > > this purpose? >> > > > > > > > > > >> > > > > > > > > > As I understand we have several problems: >> > > > > > > > > > >> > > > > > > > > > - thread and transaction have hard related (we use >> > > > > thread-local >> > > > > > > > > variable >> > > > > > > > > > and thread name) >> > > > > > > > > > - we can process only one transaction at the same >> time >> > in >> > > > one >> > > > > > > thread >> > > > > > > > > (it >> > > > > > > > > > mean we need hold thread per client. If connect 100 >> thin >> > > > > clients >> > > > > > > to >> > > > > > > > 1 >> > > > > > > > > > server node, then need to hold 100 thread on the >> server >> > > > side) >> > > > > > > > > > >> > > > > > > > > > Let's discuss how we can implement transactions for the >> > thin >> > > > > > client. >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > -- >> > > > > Sergey Kozlov >> > > > > GridGain Systems >> > > > > www.gridgain.com >> > > > > >> > > > >> > > >> > >> > >> > -- >> > Sergey Kozlov >> > GridGain Systems >> > www.gridgain.com >> > >> >