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 > > > > > >