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