Hello Ignite Users,
in
https://apacheignite.readme.io/docs/queue-and-set#collection-configuration
is stated, that the underlying cache for IgniteQueue can be transactional.
Since the underlying cache is an implementation detail, I expected the
IgniteQueue, configured with a transactional underlying cache, to be
transactional itself. Unfortunately, this is not the case.
I've added a test also using a IgniteCache as comparison (where a
modification is rolled back) to the IgniteQueue (where a modification is not
rolled back).
@Test
public void transactionalAddToQueueCanBeRolledBack() throws Exception {
// given
Ignite ignite = Ignition.start();
CacheConfiguration<Integer, String> cacheConfig = new
CacheConfiguration<>();
cacheConfig.setName("cache" + System.currentTimeMillis());
cacheConfig.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
IgniteCache<Integer, String> cache =
ignite.getOrCreateCache(cacheConfig);
CollectionConfiguration queueConfig = new CollectionConfiguration();
queueConfig.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
IgniteQueue<String> queue = ignite.queue("queue" +
System.currentTimeMillis(), 0, queueConfig);
// when
Transaction txStart =
ignite.transactions().txStart(TransactionConcurrency.PESSIMISTIC,
TransactionIsolation.SERIALIZABLE);
cache.put(1, "foo");
queue.add("foo");
txStart.rollback();
// then
assertEquals(0, cache.size());
assertEquals(0, queue.size()); // AssertionError: expected: <0> but was:
<1>
}
The same happens using IgniteSet.
Is the adding supposed to be transactional in this case?
Kind regards
Mateusz
--
View this message in context:
http://apache-ignite-users.70518.x6.nabble.com/Transactional-adding-to-IgniteQueue-and-IgniteSet-tp6410.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.