Re: Question about cache and transaction on different nodes
Yes, sorry. The test works correctly: tx started on grid0 does not affect cache1, because they are on different nodes. Thus the operation cache1.put(1, ) is successfully committed. Still I would not recommend to rely on any of observed behaviors here, because Ignite was not designed for mixing caches and transactions from different nodes in the same code. This behavior is undefined, untested and may freely change at any time. Sergi 2017-04-13 0:08 GMT+03:00 Dmitriy Setrakyan: > There is no bug. > > Dmitriy, you should introduce a variable: > > *cache0 = grid(0).cache(null);* > > Then you should use cache0 variable to do a cache put. > > You cannot use transaction API from grid0 and then cache API from grid1. In > a normal environment, the cache0 and cache1 variables would not even be > present in the same JVM - they would be on different physical servers. > > D. > > On Wed, Apr 12, 2017 at 11:08 AM, Sergi Vladykin > > wrote: > > > Looks like a bug to me. > > > > Sergi > > > > 2017-04-12 21:03 GMT+03:00 Дмитрий Рябов : > > > > > Why not? I do something with cache inside transaction. The only reason > to > > > not rollback is another node? > > > > > > 2017-04-12 19:52 GMT+03:00 Andrey Mashenkov < > andrey.mashen...@gmail.com > > >: > > > > > > > Hi Dmitry, > > > > > > > > Looks like you start transaction on node "grid(0)", but update value > on > > > > another node "grid(1)". > > > > So, technically, it is not nested transactions, right? > > > > > > > > On Wed, Apr 12, 2017 at 7:32 PM, Дмитрий Рябов < > somefire...@gmail.com> > > > > wrote: > > > > > > > > > Hello, igniters. I start the node and create a transactional cache > on > > > it, > > > > > on the other node I start the transaction and "put" in previously > > > created > > > > > cache and rollback transaction. So what should I get? Value stored > > > before > > > > > transaction or inside rolled transaction? > > > > > > > > > > public void testRollback() throws Exception { > > > > > startGrid(0); > > > > > startGrid(1); > > > > > IgniteCache cache1 = grid( 1).cache(null); > > > > > cache1.put(1, 1); > > > > > try (Transaction tx = grid(0).transactions(). > > txStart(PESSIMISTIC, > > > > READ_COMMITTED)) { > > > > > cache1.put(1, ); > > > > > tx.rollback(); > > > > > } > > > > > assertEquals((Integer) 1, cache1.get(1)); > > > > > } > > > > > > > > > > > > > > > The question is why I got instead of 1? If it is right > > behaviour - > > > > > why it nowhere explained? > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Best regards, > > > > Andrey V. Mashenkov > > > > > > > > > >
Re: Question about cache and transaction on different nodes
There is no bug. Dmitriy, you should introduce a variable: *cache0 = grid(0).cache(null);* Then you should use cache0 variable to do a cache put. You cannot use transaction API from grid0 and then cache API from grid1. In a normal environment, the cache0 and cache1 variables would not even be present in the same JVM - they would be on different physical servers. D. On Wed, Apr 12, 2017 at 11:08 AM, Sergi Vladykinwrote: > Looks like a bug to me. > > Sergi > > 2017-04-12 21:03 GMT+03:00 Дмитрий Рябов : > > > Why not? I do something with cache inside transaction. The only reason to > > not rollback is another node? > > > > 2017-04-12 19:52 GMT+03:00 Andrey Mashenkov >: > > > > > Hi Dmitry, > > > > > > Looks like you start transaction on node "grid(0)", but update value on > > > another node "grid(1)". > > > So, technically, it is not nested transactions, right? > > > > > > On Wed, Apr 12, 2017 at 7:32 PM, Дмитрий Рябов > > > wrote: > > > > > > > Hello, igniters. I start the node and create a transactional cache on > > it, > > > > on the other node I start the transaction and "put" in previously > > created > > > > cache and rollback transaction. So what should I get? Value stored > > before > > > > transaction or inside rolled transaction? > > > > > > > > public void testRollback() throws Exception { > > > > startGrid(0); > > > > startGrid(1); > > > > IgniteCache cache1 = grid( 1).cache(null); > > > > cache1.put(1, 1); > > > > try (Transaction tx = grid(0).transactions(). > txStart(PESSIMISTIC, > > > READ_COMMITTED)) { > > > > cache1.put(1, ); > > > > tx.rollback(); > > > > } > > > > assertEquals((Integer) 1, cache1.get(1)); > > > > } > > > > > > > > > > > > The question is why I got instead of 1? If it is right > behaviour - > > > > why it nowhere explained? > > > > > > > > > > > > > > > > > > > > > -- > > > Best regards, > > > Andrey V. Mashenkov > > > > > >
Re: Question about cache and transaction on different nodes
Looks like a bug to me. Sergi 2017-04-12 21:03 GMT+03:00 Дмитрий Рябов: > Why not? I do something with cache inside transaction. The only reason to > not rollback is another node? > > 2017-04-12 19:52 GMT+03:00 Andrey Mashenkov : > > > Hi Dmitry, > > > > Looks like you start transaction on node "grid(0)", but update value on > > another node "grid(1)". > > So, technically, it is not nested transactions, right? > > > > On Wed, Apr 12, 2017 at 7:32 PM, Дмитрий Рябов > > wrote: > > > > > Hello, igniters. I start the node and create a transactional cache on > it, > > > on the other node I start the transaction and "put" in previously > created > > > cache and rollback transaction. So what should I get? Value stored > before > > > transaction or inside rolled transaction? > > > > > > public void testRollback() throws Exception { > > > startGrid(0); > > > startGrid(1); > > > IgniteCache cache1 = grid( 1).cache(null); > > > cache1.put(1, 1); > > > try (Transaction tx = grid(0).transactions().txStart(PESSIMISTIC, > > READ_COMMITTED)) { > > > cache1.put(1, ); > > > tx.rollback(); > > > } > > > assertEquals((Integer) 1, cache1.get(1)); > > > } > > > > > > > > > The question is why I got instead of 1? If it is right behaviour - > > > why it nowhere explained? > > > > > > > > > > > > > > > -- > > Best regards, > > Andrey V. Mashenkov > > >
Re: Question about cache and transaction on different nodes
Why not? I do something with cache inside transaction. The only reason to not rollback is another node? 2017-04-12 19:52 GMT+03:00 Andrey Mashenkov: > Hi Dmitry, > > Looks like you start transaction on node "grid(0)", but update value on > another node "grid(1)". > So, technically, it is not nested transactions, right? > > On Wed, Apr 12, 2017 at 7:32 PM, Дмитрий Рябов > wrote: > > > Hello, igniters. I start the node and create a transactional cache on it, > > on the other node I start the transaction and "put" in previously created > > cache and rollback transaction. So what should I get? Value stored before > > transaction or inside rolled transaction? > > > > public void testRollback() throws Exception { > > startGrid(0); > > startGrid(1); > > IgniteCache cache1 = grid( 1).cache(null); > > cache1.put(1, 1); > > try (Transaction tx = grid(0).transactions().txStart(PESSIMISTIC, > READ_COMMITTED)) { > > cache1.put(1, ); > > tx.rollback(); > > } > > assertEquals((Integer) 1, cache1.get(1)); > > } > > > > > > The question is why I got instead of 1? If it is right behaviour - > > why it nowhere explained? > > > > > > > > > -- > Best regards, > Andrey V. Mashenkov >
Re: Question about cache and transaction on different nodes
Hi Dmitry, Looks like you start transaction on node "grid(0)", but update value on another node "grid(1)". So, technically, it is not nested transactions, right? On Wed, Apr 12, 2017 at 7:32 PM, Дмитрий Рябовwrote: > Hello, igniters. I start the node and create a transactional cache on it, > on the other node I start the transaction and "put" in previously created > cache and rollback transaction. So what should I get? Value stored before > transaction or inside rolled transaction? > > public void testRollback() throws Exception { > startGrid(0); > startGrid(1); > IgniteCache cache1 = grid( 1).cache(null); > cache1.put(1, 1); > try (Transaction tx = grid(0).transactions().txStart(PESSIMISTIC, > READ_COMMITTED)) { > cache1.put(1, ); > tx.rollback(); > } > assertEquals((Integer) 1, cache1.get(1)); > } > > > The question is why I got instead of 1? If it is right behaviour - > why it nowhere explained? > > > -- Best regards, Andrey V. Mashenkov
Question about cache and transaction on different nodes
Hello, igniters. I start the node and create a transactional cache on it, on the other node I start the transaction and "put" in previously created cache and rollback transaction. So what should I get? Value stored before transaction or inside rolled transaction? public void testRollback() throws Exception { startGrid(0); startGrid(1); IgniteCachecache1 = grid( 1).cache(null); cache1.put(1, 1); try (Transaction tx = grid(0).transactions().txStart(PESSIMISTIC, READ_COMMITTED)) { cache1.put(1, ); tx.rollback(); } assertEquals((Integer) 1, cache1.get(1)); } The question is why I got instead of 1? If it is right behaviour - why it nowhere explained?