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