On Tue, Nov 8, 2016 at 11:51 AM, Sergi Vladykin <sergi.vlady...@gmail.com>
wrote:

> Dmitriy,
>
> I don't see how we can support it without having all the complex MVCC
> machinery that we are creating for 2.0 (and it is very far from being
> ready).
>

I see your point, but why not add the SQL commands right now and support
transactions in the same way we support them in the project?


>
> Sergi
>
> 2016-11-08 20:38 GMT+03:00 Dmitriy Setrakyan <dsetrak...@apache.org>:
>
> > 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
> >>> >> >>>>
> >>> >> >>>
> >>> >> >>
> >>> >>
> >>> >>
> >>> >
> >>>
> >>
> >>
> >
>

Reply via email to