You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/02/15 10:44:43 UTC
[18/50] [abbrv] ignite git commit: ignite-3537 Added tests. This
closes #1441
ignite-3537 Added tests.
This closes #1441
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/db5da76a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/db5da76a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/db5da76a
Branch: refs/heads/ignite-3477-merge2.0
Commit: db5da76a57734b0509c70cc3afc284310a35fe0f
Parents: 46ff66e
Author: javaller <vo...@gmail.com>
Authored: Wed Feb 8 21:49:57 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Feb 8 21:49:57 2017 +0300
----------------------------------------------------------------------
...CacheAtomicReferenceApiSelfAbstractTest.java | 60 +++++++++++++++++++-
...idCacheAtomicStampedApiSelfAbstractTest.java | 59 +++++++++++++++++++
.../GridCacheQueueApiSelfAbstractTest.java | 58 +++++++++++++++++++
.../GridCacheSetAbstractSelfTest.java | 53 +++++++++++++++++
.../IgniteAtomicLongApiAbstractSelfTest.java | 27 +++++++++
.../IgniteCountDownLatchAbstractSelfTest.java | 43 ++++++++++++++
.../IgniteLockAbstractSelfTest.java | 54 +++++++++++++++++-
.../IgniteSemaphoreAbstractSelfTest.java | 52 ++++++++++++++++-
8 files changed, 403 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicReferenceApiSelfAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicReferenceApiSelfAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicReferenceApiSelfAbstractTest.java
index 278bcf9..3c4b3a7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicReferenceApiSelfAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicReferenceApiSelfAbstractTest.java
@@ -18,8 +18,15 @@
package org.apache.ignite.internal.processors.cache.datastructures;
import java.util.UUID;
+import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteAtomicReference;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.transactions.Transaction;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Basic tests for atomic reference.
@@ -127,4 +134,55 @@ public abstract class GridCacheAtomicReferenceApiSelfAbstractTest extends Ignite
assertTrue(success);
assertEquals("newVal", atomic.get());
}
-}
+
+ /**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ String atomicName = UUID.randomUUID().toString();
+
+ String initValue = "qazwsx";
+
+ IgniteAtomicReference<String> atomicReference = ignite.atomicReference(atomicName, initValue, true);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ assertEquals(initValue, atomicReference.get());
+
+ assertTrue(atomicReference.compareAndSet(initValue, "aaa"));
+
+ assertEquals("aaa", atomicReference.get());
+
+ tx.rollback();
+
+ assertEquals(0, cache.size());
+ }
+
+ assertTrue(atomicReference.compareAndSet("aaa", null));
+
+ assertNull(atomicReference.get());
+
+ atomicReference.close();
+
+ assertTrue(atomicReference.removed());
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicStampedApiSelfAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicStampedApiSelfAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicStampedApiSelfAbstractTest.java
index 7474330..81300e4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicStampedApiSelfAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheAtomicStampedApiSelfAbstractTest.java
@@ -18,8 +18,15 @@
package org.apache.ignite.internal.processors.cache.datastructures;
import java.util.UUID;
+import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteAtomicStamped;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.transactions.Transaction;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Basic tests for atomic stamped.
@@ -120,4 +127,56 @@ public abstract class GridCacheAtomicStampedApiSelfAbstractTest extends IgniteAt
assertEquals(null, atomic.value());
assertEquals(null, atomic.stamp());
}
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("MyCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ String atomicName = UUID.randomUUID().toString();
+
+ String initVal = "qwerty";
+ String initStamp = "asdf";
+
+ IgniteAtomicStamped<String, String> atomicStamped = ignite.atomicStamped(atomicName,
+ initVal,
+ initStamp,
+ true);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1,1);
+
+ assertEquals(initVal, atomicStamped.value());
+ assertEquals(initStamp, atomicStamped.stamp());
+ assertEquals(initVal, atomicStamped.get().get1());
+ assertEquals(initStamp, atomicStamped.get().get2());
+
+ assertTrue(atomicStamped.compareAndSet(initVal, "b", initStamp, "d"));
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertEquals("b", atomicStamped.value());
+ assertEquals("d", atomicStamped.stamp());
+
+ atomicStamped.close();
+
+ assertTrue(atomicStamped.removed());
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java
index 93d0989..3e7eff9 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheQueueApiSelfAbstractTest.java
@@ -25,6 +25,8 @@ import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteQueue;
import org.apache.ignite.cache.CacheMode;
@@ -38,9 +40,11 @@ import org.apache.ignite.lang.IgniteCallable;
import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.transactions.Transaction;
import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Queue basic tests.
@@ -772,6 +776,60 @@ public abstract class GridCacheQueueApiSelfAbstractTest extends IgniteCollection
}
/**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ String queueName = UUID.randomUUID().toString();
+
+ IgniteQueue<String> queue = grid(0).queue(queueName, 0, config(false));
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ for (int i = 0; i < QUEUE_CAPACITY; i++)
+ queue.put("Item-" + i);
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertEquals(QUEUE_CAPACITY, queue.size());
+
+ queue.remove("Item-1");
+
+ assertEquals(QUEUE_CAPACITY - 1, queue.size());
+
+ assertEquals("Item-0", queue.peek());
+ assertEquals("Item-0", queue.poll());
+ assertEquals("Item-2", queue.poll());
+
+ assertEquals(0, queue.size());
+
+ queue.clear();
+
+ assertTrue(queue.isEmpty());
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+
+ /**
* Test class with the same hash code.
*/
private static class SameHashItem implements Serializable {
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
index 9973b27..5ccb830 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
@@ -28,11 +28,13 @@ import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.AssertionFailedError;
+import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteSet;
import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.CollectionConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
@@ -47,9 +49,12 @@ import org.apache.ignite.lang.IgniteCallable;
import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.transactions.Transaction;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.LOCAL;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Cache set tests.
@@ -948,6 +953,54 @@ public abstract class GridCacheSetAbstractSelfTest extends IgniteCollectionAbstr
}
/**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ CollectionConfiguration colCfg = collectionConfiguration();
+
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ IgniteSet<Integer> set0 = ignite.set(SET_NAME, colCfg);
+
+ assertNotNull(set0);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ Collection<Integer> items = new ArrayList<>(100);
+
+ for (int i = 0; i < 100; i++)
+ items.add(i);
+
+ set0.addAll(items);
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertEquals(100, set0.size());
+
+ set0.close();
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+
+ /**
* @param set Set.
* @param size Expected size.
*/
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteAtomicLongApiAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteAtomicLongApiAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteAtomicLongApiAbstractSelfTest.java
index 9672265..49a1c72 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteAtomicLongApiAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteAtomicLongApiAbstractSelfTest.java
@@ -265,4 +265,31 @@ public abstract class IgniteAtomicLongApiAbstractSelfTest extends IgniteAtomicsA
assert newVal == atomic.get();
}
}
+
+ /**
+ * Implementation of ignite data structures internally uses special system caches, need make sure that
+ * transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ IgniteCache<Object, Object> cache = ignite.cache(TRANSACTIONAL_CACHE_NAME);
+
+ IgniteAtomicLong atomic = ignite.atomicLong("atomic", 0, true);
+
+ long curAtomicVal = atomic.get();
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ atomic.getAndIncrement();
+
+ cache.put(1, 1);
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+ assertEquals(curAtomicVal + 1, atomic.get());
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteCountDownLatchAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteCountDownLatchAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteCountDownLatchAbstractSelfTest.java
index e9b83d9..88966b0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteCountDownLatchAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteCountDownLatchAbstractSelfTest.java
@@ -35,6 +35,7 @@ import org.apache.ignite.IgniteCountDownLatch;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.cluster.ClusterGroup;
import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteKernal;
import org.apache.ignite.internal.util.typedef.G;
@@ -45,11 +46,14 @@ import org.apache.ignite.lang.IgniteRunnable;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.transactions.Transaction;
import org.jetbrains.annotations.Nullable;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Cache count down latch self test.
@@ -78,6 +82,45 @@ public abstract class IgniteCountDownLatchAbstractSelfTest extends IgniteAtomics
}
/**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ IgniteCountDownLatch latch = ignite.countDownLatch("latch1", 10, false, true);
+
+ assertNotNull(latch);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ assertEquals(8, latch.countDown(2));
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertEquals(7, latch.countDown(1));
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+
+ /**
* @throws Exception If failed.
*/
private void checkLatch() throws Exception {
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
index 388f167..27e05b9 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCompute;
import org.apache.ignite.IgniteCondition;
@@ -42,6 +43,7 @@ import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteInterruptedException;
import org.apache.ignite.IgniteLock;
import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteKernal;
@@ -54,6 +56,7 @@ import org.apache.ignite.lang.IgniteFuture;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.transactions.Transaction;
import org.jetbrains.annotations.Nullable;
import org.junit.Rule;
import org.junit.rules.ExpectedException;
@@ -61,7 +64,9 @@ import org.junit.rules.ExpectedException;
import static java.util.concurrent.TimeUnit.MICROSECONDS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.LOCAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Cache reentrant lock self test.
@@ -112,8 +117,55 @@ public abstract class IgniteLockAbstractSelfTest extends IgniteAtomicsAbstractTe
}
/**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ IgniteLock lock = ignite.reentrantLock("lock", true, true, true);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ boolean success = lock.tryLock(1, MILLISECONDS);
+
+ assertTrue(success);
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertTrue(lock.isLocked());
+
+ lock.unlock();
+
+ assertFalse(lock.isLocked());
+
+ lock.close();
+
+ assertTrue(lock.removed());
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+
+ /**
* @param failoverSafe Failover safe flag.
- * @throws Exception
+ * @throws Exception If failed.
*/
private void checkFailover(final boolean failoverSafe, final boolean fair) throws Exception {
IgniteEx g = startGrid(NODES_CNT + 1);
http://git-wip-us.apache.org/repos/asf/ignite/blob/db5da76a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
index 5241dd1..8ad8631 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
@@ -26,10 +26,12 @@ import java.util.List;
import java.util.Random;
import java.util.concurrent.Callable;
import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteCompute;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.IgniteSemaphore;
+import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
@@ -42,6 +44,7 @@ import org.apache.ignite.resources.IgniteInstanceResource;
import org.apache.ignite.resources.LoggerResource;
import org.apache.ignite.testframework.GridStringLogger;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.transactions.Transaction;
import org.jetbrains.annotations.Nullable;
import org.junit.Rule;
import org.junit.rules.ExpectedException;
@@ -49,7 +52,9 @@ import org.junit.rules.ExpectedException;
import static java.util.concurrent.TimeUnit.MICROSECONDS;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.LOCAL;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* Cache semaphore self test.
@@ -94,8 +99,53 @@ public abstract class IgniteSemaphoreAbstractSelfTest extends IgniteAtomicsAbstr
}
/**
+ * Implementation of ignite data structures internally uses special system caches, need make sure
+ * that transaction on these system caches do not intersect with transactions started by user.
+ *
+ * @throws Exception If failed.
+ */
+ public void testIsolation() throws Exception {
+ Ignite ignite = grid(0);
+
+ CacheConfiguration cfg = new CacheConfiguration();
+
+ cfg.setName("myCache");
+ cfg.setAtomicityMode(TRANSACTIONAL);
+ cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+ IgniteCache<Integer, Integer> cache = ignite.getOrCreateCache(cfg);
+
+ try {
+ IgniteSemaphore semaphore = ignite.semaphore("testIsolation", 1, true, true);
+
+ assertNotNull(semaphore);
+
+ try (Transaction tx = ignite.transactions().txStart()) {
+ cache.put(1, 1);
+
+ assertEquals(1, semaphore.availablePermits());
+
+ semaphore.acquire();
+
+ tx.rollback();
+ }
+
+ assertEquals(0, cache.size());
+
+ assertEquals(0, semaphore.availablePermits());
+
+ semaphore.close();
+
+ assertTrue(semaphore.removed());
+ }
+ finally {
+ ignite.destroyCache(cfg.getName());
+ }
+ }
+
+ /**
* @param failoverSafe Failover safe flag.
- * @throws Exception
+ * @throws Exception If failed.
*/
private void checkFailover(boolean failoverSafe) throws Exception {
IgniteEx g = startGrid(NODES_CNT + 1);