I’ve wrapped up the outcomes of the discussion and created JIRA tickets https://issues.apache.org/jira/browse/IGNITE-4188 <https://issues.apache.org/jira/browse/IGNITE-4188>
Sergi, do we already have a ticket created for >> All the SQL statements currently run out of transactions. It is a big >> feature for 2.0 ? — Denis > On Nov 8, 2016, at 9:38 AM, Dmitriy Setrakyan <dsetrak...@apache.org> wrote: > > I am not sure why we don't add the transaction support now, given that we > are going to support insert, update, and delete statements. > > On Tue, Nov 8, 2016 at 4:50 AM, Sergi Vladykin <sergi.vlady...@gmail.com> > wrote: > >> All the SQL statements currently run out of transactions. It is a big >> feature for 2.0 >> >> Sergi >> >> 2016-11-08 15:09 GMT+03:00 Igor Sapego <isap...@gridgain.com>: >> >>> Hi, >>> >>> Currently, we do not support transaction in ODBC at all. I'm not quite >>> sure >>> about JDBC, but I believe we do not support them there either. As far as >>> I know this is because we do not support transactions on the SQL level >>> currently. Serge, can you confirm? >>> >>> >>> Best Regards, >>> Igor >>> >>> On Tue, Nov 8, 2016 at 12:46 AM, Dmitriy Setrakyan <dsetrak...@apache.org >>>> >>> wrote: >>> >>>> Couldn't agree more about ODBC and JDBC. We must support savepoints from >>>> SLQ, given the DML functionality being planned for 1.8 release. >>>> >>>> On Mon, Nov 7, 2016 at 11:23 AM, Denis Magda <dma...@gridgain.com> >>> wrote: >>>> >>>>> This is how how the savepoints are supported by PostgreSQL [1], Oracle >>>>> [2] and MySQL [3]. The implementation details and behavior are pretty >>> the >>>>> same and similar to the Yakov’s proposal. >>>>> >>>>> It worth to note that all the engines support multiple savepoints per >>>>> transaction named uniquely and the RELEASE statement. If the one start >>> a >>>>> second savepoint with the name of an already existed one then the old >>>>> savepoint will be erased/deleted. >>>>> >>>>> In addition it makes sense to support the feature at the level of our >>>>> JDBC [4] and ODBC creating respective sub-tasks. Igor, I’ve googled >>> that >>>>> ODBC supports savepoints but didn’t succeed at finding exact APIs. >>> Please >>>>> assist. >>>>> >>>>> [1] https://www.postgresql.org/docs/8.1/static/sql-savepoint.html < >>>>> https://www.postgresql.org/docs/8.1/static/sql-savepoint.html> >>>>> [2] https://docs.oracle.com/cd/B19306_01/server.102/b14200/state >>>>> ments_10001.htm <https://docs.oracle.com/cd/B1 >>>>> 9306_01/server.102/b14200/statements_10001.htm> >>>>> [3] http://dev.mysql.com/doc/refman/5.7/en/savepoint.html < >>>>> http://dev.mysql.com/doc/refman/5.7/en/savepoint.html> >>>>> >>>>> [4] https://docs.oracle.com/javase/tutorial/jdbc/basics/transact >>>>> ions.html#set_roll_back_savepoints >>>>> >>>>> — >>>>> Denis >>>>> >>>>>> On Nov 7, 2016, at 9:13 AM, Dmitriy Setrakyan <dsetrak...@apache.org >>>> >>>>> wrote: >>>>>> >>>>>> Does anyone know how MySQL or PostgreSQL work with checkpoints? Do >>> they >>>>>> support it in a similar way? >>>>>> >>>>>> On Mon, Nov 7, 2016 at 5:58 AM, Yakov Zhdanov <yzhda...@apache.org> >>>>> wrote: >>>>>> >>>>>>> Alex, I think we should put consecutive checkpoints to stack thus >>> your >>>>>>> example should be illegal and should result to exception. And we >>> will >>>>> throw >>>>>>> exception on rollback to CP if CP is not defined. >>>>>>> >>>>>>> --Yakov >>>>>>> >>>>>>> 2016-11-07 14:23 GMT+03:00 Alexey Goncharuk < >>>>> alexey.goncha...@gmail.com>: >>>>>>> >>>>>>>> We also should define savepoint behavior and API rules for each of >>> the >>>>>>>> transaction concurrency and isolation types. >>>>>>>> >>>>>>>> * Should rollbackToSavepoint() always release locks or clear saved >>>>>>>> optimistic versions? >>>>>>>> * Are forward-rollbacks allowed, e.g. >>>>>>>> >>>>>>>> try (Transaction tx = ignite.transactions().txStart()) { >>>>>>>> c.put(1, 1); >>>>>>>> >>>>>>>> tx.savepoint("sp1"); >>>>>>>> >>>>>>>> c.put(2, 2); >>>>>>>> >>>>>>>> tx.savepoint("sp2") >>>>>>>> >>>>>>>> c.put(3, 3); >>>>>>>> >>>>>>>> tx.rollbackToSavepoint("sp1"); >>>>>>>> >>>>>>>> c.put(4, 4); >>>>>>>> >>>>>>>> tx.rollbackToSavepoint("sp2"); // Is this allowed? >>>>>>>> >>>>>>>> tx.commit(); >>>>>>>> } >>>>>>>> >>>>>>>> >>>>>>>> 2016-11-07 13:47 GMT+03:00 Sergey Kozlov <skoz...@gridgain.com>: >>>>>>>> >>>>>>>>> Hi, Yakov >>>>>>>>> >>>>>>>>> I suppose it's very very handy feature. >>>>>>>>> My two cents are following: >>>>>>>>> - number of savepoints may be more than one per transaction >>>>>>>>> - what's about RELEASE SAVEPOINT statement? >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Nov 7, 2016 at 11:24 AM, Yakov Zhdanov < >>> yzhda...@apache.org> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Guys, >>>>>>>>>> >>>>>>>>>> Let's think of implementing savepoints for Ignite transactions. >>> For >>>>>>> me, >>>>>>>>>> this is not too hard to do. >>>>>>>>>> >>>>>>>>>> Having "savepoints" seems to be pretty handy. Please consider the >>>>>>>>> following >>>>>>>>>> snippet. >>>>>>>>>> >>>>>>>>>> ignite.transactions.; >>>>>>>>>> INSERT INTO table1 VALUES (1); >>>>>>>>>> SAVEPOINT my_savepoint; >>>>>>>>>> INSERT INTO table1 VALUES (2); >>>>>>>>>> ROLLBACK TO SAVEPOINT my_savepoint; >>>>>>>>>> INSERT INTO table1 VALUES (3); >>>>>>>>>> COMMIT; >>>>>>>>>> >>>>>>>>>> Which should result in values 1 and 3 inserted to table1. >>>>>>>>>> >>>>>>>>>> In Ignite, I think, it would be like the following (preserving >>> the >>>>>>>> same >>>>>>>>>> behavior as above). >>>>>>>>>> >>>>>>>>>> Ignite ignite = ....; >>>>>>>>>> IgniteCache<Integer, Integer> c = ....; >>>>>>>>>> >>>>>>>>>> try (Transaction tx = ignite.transactions().txStart()) { >>>>>>>>>> c.put(1, 1); >>>>>>>>>> >>>>>>>>>> tx.savepoint("mysavepoint"); >>>>>>>>>> >>>>>>>>>> c.put(2, 2); >>>>>>>>>> >>>>>>>>>> tx.rollbackToSavepoint("mysavepoint"); >>>>>>>>>> >>>>>>>>>> c.put(3, 3); >>>>>>>>>> >>>>>>>>>> tx.commit(); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> As far as implementation complexity I would give 2 weeks >>> ballpark. >>>>>>>>>> >>>>>>>>>> 5 days - API design and implementation for different types of >>>>>>>>> transactions >>>>>>>>>> - savepoint implementation for local transaction objects >>>>>>>>>> - rollback implementation for different types of transactions - >>>>> drain >>>>>>>>> local >>>>>>>>>> tx buffers, release remote locks for pessimistic transactions, >>> etc. >>>>>>>>>> >>>>>>>>>> 5 days - testing, benchmarking, fixing issues. >>>>>>>>>> >>>>>>>>>> Please leave your comments here. I will file a ticket after we >>>>>>> discuss >>>>>>>>> this >>>>>>>>>> and put our summary to it. >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> --Yakov >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Sergey Kozlov >>>>>>>>> GridGain Systems >>>>>>>>> www.gridgain.com >>>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>>> >>>> >>> >> >>