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 2018/12/06 16:27:25 UTC
[37/50] [abbrv] ignite git commit: IGNITE-10368: MVCC: Create "Cache
9" test suite for MVCC mode. This closes #5556.
IGNITE-10368: MVCC: Create "Cache 9" test suite for MVCC mode. This closes #5556.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bc895ac6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bc895ac6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bc895ac6
Branch: refs/heads/ignite-10044
Commit: bc895ac62f8049ac52f007cf80b23d1296198ad9
Parents: 9edd786
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Wed Dec 5 16:26:35 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Dec 5 16:26:35 2018 +0300
----------------------------------------------------------------------
.../processors/cache/CachePutIfAbsentTest.java | 4 +
.../distributed/IgniteCachePrimarySyncTest.java | 53 +++++++----
.../IgniteTxCachePrimarySyncTest.java | 96 +++++++++++++++++---
...teSynchronizationModesMultithreadedTest.java | 78 +++++++++-------
.../IgniteTxConcurrentRemoveObjectsTest.java | 52 ++++++++---
.../testsuites/IgniteCacheMvccTestSuite9.java | 57 ++++++++++++
.../testsuites/IgniteCacheTestSuite9.java | 33 ++++---
7 files changed, 283 insertions(+), 90 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CachePutIfAbsentTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CachePutIfAbsentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CachePutIfAbsentTest.java
index 00ba25f..a70d3c3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CachePutIfAbsentTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CachePutIfAbsentTest.java
@@ -30,6 +30,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.MvccFeatureChecker;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
@@ -129,6 +130,9 @@ public class CachePutIfAbsentTest extends GridCommonAbstractTest {
for (TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
try (Transaction tx = txs.txStart(concurrency, isolation)) {
Object old = cache.getAndPutIfAbsent(key, 3);
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePrimarySyncTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePrimarySyncTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePrimarySyncTest.java
index e9e22ee..2482a8e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePrimarySyncTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePrimarySyncTest.java
@@ -27,6 +27,7 @@ import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.MvccFeatureChecker;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
@@ -35,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.PRIMARY_SYNC;
import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
@@ -53,6 +55,15 @@ public class IgniteCachePrimarySyncTest extends GridCommonAbstractTest {
private static final int SRVS = 4;
/** */
+ private static final String ATOMIC_CACHE = "atomicCache";
+
+ /** */
+ private static final String TX_CACHE = "txCache";
+
+ /** */
+ private static final String MVCC_CACHE = "mvccCache";
+
+ /** */
private boolean clientMode;
/** {@inheritDoc} */
@@ -61,19 +72,22 @@ public class IgniteCachePrimarySyncTest extends GridCommonAbstractTest {
((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(ipFinder);
- CacheConfiguration<Object, Object> ccfg1 = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
- ccfg1.setName("cache1");
- ccfg1.setAtomicityMode(ATOMIC);
- ccfg1.setBackups(2);
- ccfg1.setWriteSynchronizationMode(PRIMARY_SYNC);
+ CacheConfiguration<Object, Object> ccfg1 = new CacheConfiguration<>(ATOMIC_CACHE)
+ .setAtomicityMode(ATOMIC)
+ .setBackups(2)
+ .setWriteSynchronizationMode(PRIMARY_SYNC);
+
+ CacheConfiguration<Object, Object> ccfg2 = new CacheConfiguration<>(TX_CACHE)
+ .setAtomicityMode(TRANSACTIONAL)
+ .setBackups(2)
+ .setWriteSynchronizationMode(PRIMARY_SYNC);
- CacheConfiguration<Object, Object> ccfg2 = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
- ccfg2.setName("cache2");
- ccfg2.setAtomicityMode(TRANSACTIONAL);
- ccfg2.setBackups(2);
- ccfg2.setWriteSynchronizationMode(PRIMARY_SYNC);
+ CacheConfiguration<Object, Object> ccfg3 = new CacheConfiguration<>(MVCC_CACHE)
+ .setAtomicityMode(TRANSACTIONAL_SNAPSHOT)
+ .setBackups(2)
+ .setWriteSynchronizationMode(PRIMARY_SYNC);
- cfg.setCacheConfiguration(ccfg1, ccfg2);
+ cfg.setCacheConfiguration(ccfg1, ccfg2, ccfg3);
cfg.setClientMode(clientMode);
@@ -97,17 +111,24 @@ public class IgniteCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
public void testPutGet() throws Exception {
+ if (MvccFeatureChecker.forcedMvcc())
+ fail("https://issues.apache.org/jira/browse/IGNITE-10520");
+
Ignite ignite = ignite(SRVS);
- checkPutGet(ignite.cache("cache1"), null, null, null);
+ checkPutGet(ignite.cache(ATOMIC_CACHE), null, null, null);
+
+ checkPutGet(ignite.cache(TX_CACHE), null, null, null);
+
+ checkPutGet(ignite.cache(MVCC_CACHE), null, null, null);
- checkPutGet(ignite.cache("cache2"), null, null, null);
+ checkPutGet(ignite.cache(TX_CACHE), ignite.transactions(), OPTIMISTIC, REPEATABLE_READ);
- checkPutGet(ignite.cache("cache2"), ignite.transactions(), OPTIMISTIC, REPEATABLE_READ);
+ checkPutGet(ignite.cache(TX_CACHE), ignite.transactions(), OPTIMISTIC, SERIALIZABLE);
- checkPutGet(ignite.cache("cache2"), ignite.transactions(), OPTIMISTIC, SERIALIZABLE);
+ checkPutGet(ignite.cache(TX_CACHE), ignite.transactions(), PESSIMISTIC, READ_COMMITTED);
- checkPutGet(ignite.cache("cache2"), ignite.transactions(), PESSIMISTIC, READ_COMMITTED);
+ checkPutGet(ignite.cache(MVCC_CACHE), ignite.transactions(), PESSIMISTIC, REPEATABLE_READ);
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
index bdf0b12..ceed9b8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
@@ -58,6 +58,8 @@ import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.MvccFeatureChecker;
+import org.apache.ignite.testframework.MvccFeatureChecker.Feature;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionConcurrency;
@@ -134,6 +136,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
public void testSingleKeyCommitFromPrimary() throws Exception {
+ if (MvccFeatureChecker.forcedMvcc())
+ fail("https://issues.apache.org/jira/browse/IGNITE-10518");
+
singleKeyCommitFromPrimary(cacheConfiguration(DEFAULT_CACHE_NAME, PRIMARY_SYNC, 1, true, false));
singleKeyCommitFromPrimary(cacheConfiguration(DEFAULT_CACHE_NAME, PRIMARY_SYNC, 2, false, false));
@@ -148,6 +153,16 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
private void singleKeyCommitFromPrimary(CacheConfiguration<Object, Object> ccfg) throws Exception {
+ if (MvccFeatureChecker.forcedMvcc()) {
+ if (ccfg.getCacheStoreFactory() != null &&
+ !MvccFeatureChecker.isSupported(Feature.CACHE_STORE))
+ return;
+
+ if (ccfg.getNearConfiguration() != null &&
+ !MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ return;
+ }
+
Ignite ignite = ignite(0);
IgniteCache<Object, Object> cache = ignite.createCache(ccfg);
@@ -164,6 +179,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (final TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
singleKeyCommitFromPrimary(node, ccfg, new IgniteBiInClosure<Integer, IgniteCache<Object, Object>>() {
@Override public void apply(Integer key, IgniteCache<Object, Object> cache) {
Ignite ignite = cache.unwrap(Ignite.class);
@@ -266,12 +284,19 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
private void singleKeyPrimaryNodeLeft(CacheConfiguration<Object, Object> ccfg) throws Exception {
+ if (MvccFeatureChecker.forcedMvcc()) {
+ if (ccfg.getCacheStoreFactory() != null &&
+ !MvccFeatureChecker.isSupported(Feature.CACHE_STORE))
+ return;
+ }
+
Ignite ignite = ignite(0);
IgniteCache<Object, Object> cache = ignite.createCache(ccfg);
try {
- ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
+ if (!MvccFeatureChecker.forcedMvcc() || MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
for (int i = 0; i < NODES; i++) {
Ignite node = ignite(i);
@@ -284,6 +309,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (final TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
singleKeyPrimaryNodeLeft(node, ccfg, new IgniteBiInClosure<Integer, IgniteCache<Object, Object>>() {
@Override public void apply(Integer key, IgniteCache<Object, Object> cache) {
Ignite ignite = cache.unwrap(Ignite.class);
@@ -372,6 +400,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
public void testSingleKeyCommit() throws Exception {
+ if (MvccFeatureChecker.forcedMvcc())
+ fail("https://issues.apache.org/jira/browse/IGNITE-10518");
+
singleKeyCommit(cacheConfiguration(DEFAULT_CACHE_NAME, PRIMARY_SYNC, 1, true, false));
singleKeyCommit(cacheConfiguration(DEFAULT_CACHE_NAME, PRIMARY_SYNC, 2, false, false));
@@ -386,12 +417,23 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
private void singleKeyCommit(CacheConfiguration<Object, Object> ccfg) throws Exception {
+ if (MvccFeatureChecker.forcedMvcc()) {
+ if (ccfg.getCacheStoreFactory() != null &&
+ !MvccFeatureChecker.isSupported(Feature.CACHE_STORE))
+ return;
+
+ if (ccfg.getNearConfiguration() != null &&
+ !MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ return;
+ }
+
Ignite ignite = ignite(0);
IgniteCache<Object, Object> cache = ignite.createCache(ccfg);
try {
- ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
+ if (!MvccFeatureChecker.forcedMvcc() || MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
for (int i = 1; i < NODES; i++) {
Ignite node = ignite(i);
@@ -406,6 +448,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (final TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
singleKeyCommit(node, ccfg, new IgniteBiInClosure<Integer, IgniteCache<Object, Object>>() {
@Override public void apply(Integer key, IgniteCache<Object, Object> cache) {
Ignite ignite = cache.unwrap(Ignite.class);
@@ -528,12 +573,23 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
private void checkWaitPrimaryResponse(CacheConfiguration<Object, Object> ccfg) throws Exception {
+ if (MvccFeatureChecker.forcedMvcc()) {
+ if (ccfg.getCacheStoreFactory() != null &&
+ !MvccFeatureChecker.isSupported(Feature.CACHE_STORE))
+ return;
+
+ if (ccfg.getNearConfiguration() != null &&
+ !MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ return;
+ }
+
Ignite ignite = ignite(0);
IgniteCache<Object, Object> cache = ignite.createCache(ccfg);
try {
- ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
+ if (!MvccFeatureChecker.forcedMvcc() || MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
+ ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
for (int i = 1; i < NODES; i++) {
Ignite node = ignite(i);
@@ -561,6 +617,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (final TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
checkWaitPrimaryResponse(node, ccfg, new IgniteBiInClosure<Integer, IgniteCache<Object, Object>>() {
@Override public void apply(Integer key, IgniteCache<Object, Object> cache) {
Ignite ignite = cache.unwrap(Ignite.class);
@@ -652,6 +711,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @throws Exception If failed.
*/
public void testOnePhaseMessages() throws Exception {
+ if (MvccFeatureChecker.forcedMvcc())
+ return; // Not supported. Commit flow differs for Mvcc mode.
+
checkOnePhaseMessages(cacheConfiguration(DEFAULT_CACHE_NAME, PRIMARY_SYNC, 1, false, false));
}
@@ -678,6 +740,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (final TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (final TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
checkOnePhaseMessages(node, ccfg, new IgniteBiInClosure<Integer, IgniteCache<Object, Object>>() {
@Override public void apply(Integer key, IgniteCache<Object, Object> cache) {
Ignite ignite = cache.unwrap(Ignite.class);
@@ -760,12 +825,13 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
List<IgniteCache<Object, Object>> caches = new ArrayList<>();
try {
- caches.add(createCache(ignite, cacheConfiguration("fullSync1", FULL_SYNC, 1, false, false), true));
- caches.add(createCache(ignite, cacheConfiguration("fullSync2", FULL_SYNC, 1, false, false), true));
- caches.add(createCache(ignite, cacheConfiguration("fullAsync1", FULL_ASYNC, 1, false, false), true));
- caches.add(createCache(ignite, cacheConfiguration("fullAsync2", FULL_ASYNC, 1, false, false), true));
- caches.add(createCache(ignite, cacheConfiguration("primarySync1", PRIMARY_SYNC, 1, false, false), true));
- caches.add(createCache(ignite, cacheConfiguration("primarySync2", PRIMARY_SYNC, 1, false, false), true));
+
+ caches.add(createCache(ignite, cacheConfiguration("fullSync1", FULL_SYNC, 1, false, false)));
+ caches.add(createCache(ignite, cacheConfiguration("fullSync2", FULL_SYNC, 1, false, false)));
+ caches.add(createCache(ignite, cacheConfiguration("fullAsync1", FULL_ASYNC, 1, false, false)));
+ caches.add(createCache(ignite, cacheConfiguration("fullAsync2", FULL_ASYNC, 1, false, false)));
+ caches.add(createCache(ignite, cacheConfiguration("primarySync1", PRIMARY_SYNC, 1, false, false)));
+ caches.add(createCache(ignite, cacheConfiguration("primarySync2", PRIMARY_SYNC, 1, false, false)));
for (int i = 0; i < NODES; i++) {
checkTxSyncMode(ignite(i), true);
@@ -805,7 +871,8 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
* @param key Cache key.
* @throws Exception If failed.
*/
- private void waitKeyUpdated(Ignite ignite, int expNodes, final String cacheName, final Object key) throws Exception {
+ private void waitKeyUpdated(Ignite ignite, int expNodes, final String cacheName,
+ final Object key) throws Exception {
Affinity<Object> aff = ignite.affinity(cacheName);
final Collection<ClusterNode> nodes = aff.mapKeyToPrimaryAndBackups(key);
@@ -834,14 +901,12 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
/**
* @param ignite Node.
* @param ccfg Cache configuration.
- * @param nearCache If {@code true} creates near cache on one of client nodes.
* @return Created cache.
*/
- private <K, V> IgniteCache<K, V> createCache(Ignite ignite, CacheConfiguration<K, V> ccfg,
- boolean nearCache) {
+ private <K, V> IgniteCache<K, V> createCache(Ignite ignite, CacheConfiguration<K, V> ccfg) {
IgniteCache<K, V> cache = ignite.createCache(ccfg);
- if (nearCache)
+ if (!MvccFeatureChecker.forcedMvcc() || MvccFeatureChecker.isSupported(Feature.NEAR_CACHE))
ignite(NODES - 1).createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
return cache;
@@ -866,6 +931,9 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
for (TransactionConcurrency concurrency : TransactionConcurrency.values()) {
for (TransactionIsolation isolation : TransactionIsolation.values()) {
+ if (MvccFeatureChecker.forcedMvcc() && !MvccFeatureChecker.isSupported(concurrency, isolation))
+ continue;
+
try (Transaction tx = txs.txStart(concurrency, isolation)) {
fullSync1.put(key++, 1);
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCacheWriteSynchronizationModesMultithreadedTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCacheWriteSynchronizationModesMultithreadedTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCacheWriteSynchronizationModesMultithreadedTest.java
index bd552c2..86d20db 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCacheWriteSynchronizationModesMultithreadedTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCacheWriteSynchronizationModesMultithreadedTest.java
@@ -32,7 +32,6 @@ import javax.cache.integration.CacheWriterException;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteSystemProperties;
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.cache.store.CacheStore;
import org.apache.ignite.cache.store.CacheStoreAdapter;
@@ -51,6 +50,7 @@ import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.MvccFeatureChecker;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionOptimisticException;
@@ -107,24 +107,26 @@ public class IgniteTxCacheWriteSynchronizationModesMultithreadedTest extends Gri
/** {@inheritDoc} */
@Override protected void beforeTestsStarted() throws Exception {
- super.beforeTestsStarted();
+ if (MvccFeatureChecker.forcedMvcc())
+ fail("https://issues.apache.org/jira/browse/IGNITE-9470");
- System.setProperty(IgniteSystemProperties.IGNITE_ENABLE_FORCIBLE_NODE_KILL,"true");
+ super.beforeTestsStarted();
- startGrids(SRVS);
+ startGridsMultiThreaded(SRVS);
clientMode = true;
- for (int i = 0; i < CLIENTS; i++) {
- Ignite client = startGrid(SRVS + i);
+ startGridsMultiThreaded(SRVS, CLIENTS);
- assertTrue(client.configuration().isClientMode());
- }
+ for (int i = 0; i < CLIENTS; i++)
+ assertTrue(grid(SRVS + i).configuration().isClientMode());
}
/** {@inheritDoc} */
@Override protected void afterTestsStopped() throws Exception {
- System.clearProperty(IgniteSystemProperties.IGNITE_ENABLE_FORCIBLE_NODE_KILL);
+ stopAllGrids();
+
+ super.afterTestsStopped();
}
/** {@inheritDoc} */
@@ -202,6 +204,14 @@ public class IgniteTxCacheWriteSynchronizationModesMultithreadedTest extends Gri
boolean store,
boolean nearCache,
boolean restart) throws Exception {
+ if (MvccFeatureChecker.forcedMvcc()) {
+ if (store && !MvccFeatureChecker.isSupported(MvccFeatureChecker.Feature.CACHE_STORE))
+ return;
+
+ if (nearCache && !MvccFeatureChecker.isSupported(MvccFeatureChecker.Feature.NEAR_CACHE))
+ return;
+ }
+
final Ignite ignite = ignite(0);
createCache(ignite, cacheConfiguration(DEFAULT_CACHE_NAME, syncMode, backups, store), nearCache);
@@ -278,36 +288,38 @@ public class IgniteTxCacheWriteSynchronizationModesMultithreadedTest extends Gri
}
});
- commitMultithreaded(new IgniteBiInClosure<Ignite, IgniteCache<Integer, Integer>>() {
- @Override public void apply(Ignite ignite, IgniteCache<Integer, Integer> cache) {
- ThreadLocalRandom rnd = ThreadLocalRandom.current();
-
- Map<Integer, Integer> map = new LinkedHashMap<>();
-
- for (int i = 0; i < 10; i++) {
- Integer key = rnd.nextInt(MULTITHREADED_TEST_KEYS);
-
- map.put(key, rnd.nextInt());
- }
+ if (!MvccFeatureChecker.forcedMvcc()) {
+ commitMultithreaded(new IgniteBiInClosure<Ignite, IgniteCache<Integer, Integer>>() {
+ @Override public void apply(Ignite ignite, IgniteCache<Integer, Integer> cache) {
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
- while (true) {
- try (Transaction tx = ignite.transactions().txStart(OPTIMISTIC, SERIALIZABLE)) {
- for (Map.Entry<Integer, Integer> e : map.entrySet())
- cache.put(e.getKey(), e.getValue());
+ Map<Integer, Integer> map = new LinkedHashMap<>();
- tx.commit();
+ for (int i = 0; i < 10; i++) {
+ Integer key = rnd.nextInt(MULTITHREADED_TEST_KEYS);
- break;
- }
- catch (TransactionOptimisticException ignored) {
- // Retry.
+ map.put(key, rnd.nextInt());
}
- catch (CacheException | IgniteException ignored) {
- break;
+
+ while (true) {
+ try (Transaction tx = ignite.transactions().txStart(OPTIMISTIC, SERIALIZABLE)) {
+ for (Map.Entry<Integer, Integer> e : map.entrySet())
+ cache.put(e.getKey(), e.getValue());
+
+ tx.commit();
+
+ break;
+ }
+ catch (TransactionOptimisticException ignored) {
+ // Retry.
+ }
+ catch (CacheException | IgniteException ignored) {
+ break;
+ }
}
}
- }
- });
+ });
+ }
}
finally {
stop.set(true);
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxConcurrentRemoveObjectsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxConcurrentRemoveObjectsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxConcurrentRemoveObjectsTest.java
index a5b2cb7..cd5cbe6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxConcurrentRemoveObjectsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxConcurrentRemoveObjectsTest.java
@@ -36,9 +36,11 @@ import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionConcurrency;
+import org.apache.ignite.transactions.TransactionIsolation;
import static org.apache.ignite.IgniteSystemProperties.IGNITE_CACHE_REMOVED_ENTRIES_TTL;
-import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
+import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
import static org.apache.ignite.transactions.TransactionIsolation.SERIALIZABLE;
/**
@@ -67,25 +69,22 @@ public class IgniteTxConcurrentRemoveObjectsTest extends GridCommonAbstractTest
oldIgniteCacheRmvEntriesTtl = Long.getLong(IGNITE_CACHE_REMOVED_ENTRIES_TTL, 10_000);
System.setProperty(IGNITE_CACHE_REMOVED_ENTRIES_TTL, Long.toString(newIgniteCacheRemovedEntriesTtl));
+
+ startGrid(0);
}
/** {@inheritDoc} */
@Override protected void afterTestsStopped() throws Exception {
+ stopAllGrids();
+
System.setProperty(IGNITE_CACHE_REMOVED_ENTRIES_TTL, Long.toString(oldIgniteCacheRmvEntriesTtl));
super.afterTestsStopped();
}
/** {@inheritDoc} */
- @Override protected void beforeTest() throws Exception {
- super.beforeTest();
-
- stopAllGrids();
- }
-
- /** {@inheritDoc} */
@Override protected void afterTest() throws Exception {
- stopAllGrids();
+ grid(0).destroyCache(DEFAULT_CACHE_NAME);
super.afterTest();
}
@@ -102,7 +101,7 @@ public class IgniteTxConcurrentRemoveObjectsTest extends GridCommonAbstractTest
/**
* @return Cache configuration.
*/
- private CacheConfiguration<Integer, String> getCacheCfg() {
+ private CacheConfiguration<Integer, String> cacheConfiguration() {
CacheConfiguration<Integer, String> ccfg = new CacheConfiguration<>();
ccfg.setName(DEFAULT_CACHE_NAME);
@@ -115,16 +114,39 @@ public class IgniteTxConcurrentRemoveObjectsTest extends GridCommonAbstractTest
}
/**
+ * @throws Exception If failed.
+ */
+ public void testOptimisticTxLeavesObjectsInLocalPartition() throws Exception {
+ checkTxLeavesObjectsInLocalPartition(cacheConfiguration(), TransactionConcurrency.OPTIMISTIC, SERIALIZABLE);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testPessimisticTxLeavesObjectsInLocalPartition() throws Exception {
+ checkTxLeavesObjectsInLocalPartition(cacheConfiguration(), TransactionConcurrency.PESSIMISTIC, SERIALIZABLE);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testMvccTxLeavesObjectsInLocalPartition() throws Exception {
+ checkTxLeavesObjectsInLocalPartition(cacheConfiguration().setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT),
+ TransactionConcurrency.PESSIMISTIC, REPEATABLE_READ);
+ }
+
+ /**
* Too many deletes in single transaction may overflow {@link GridDhtLocalPartition#rmvQueue} and entries will be
* deleted synchronously in {@link GridDhtLocalPartition#onDeferredDelete(int, KeyCacheObject, GridCacheVersion)}.
* This should not corrupt internal map state in {@link GridDhtLocalPartition}.
*
* @throws Exception If failed.
*/
- public void testTxLeavesObjectsInLocalPartition() throws Exception {
- IgniteEx igniteEx = startGrid(getConfiguration());
+ public void checkTxLeavesObjectsInLocalPartition(CacheConfiguration<Integer, String> ccfg,
+ TransactionConcurrency optimistic, TransactionIsolation isolation) throws Exception {
+ IgniteEx igniteEx = grid(0);
- igniteEx.getOrCreateCache(getCacheCfg());
+ igniteEx.getOrCreateCache(ccfg);
try (IgniteDataStreamer<Integer, String> dataStreamer = igniteEx.dataStreamer(DEFAULT_CACHE_NAME)) {
for (int i = 0; i < CACHE_ENTRIES_COUNT; i++)
@@ -141,8 +163,8 @@ public class IgniteTxConcurrentRemoveObjectsTest extends GridCommonAbstractTest
assertEquals(CACHE_ENTRIES_COUNT, client.getOrCreateCache(DEFAULT_CACHE_NAME).size());
- try (Transaction tx = client.transactions().txStart(OPTIMISTIC, SERIALIZABLE)) {
- IgniteCache<Integer, String> cache = client.getOrCreateCache(getCacheCfg());
+ try (Transaction tx = client.transactions().txStart(optimistic, isolation)) {
+ IgniteCache<Integer, String> cache = client.getOrCreateCache(cacheConfiguration());
for (int v = 0; v < CACHE_ENTRIES_COUNT; v++) {
cache.get(v);
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite9.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite9.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite9.java
new file mode 100644
index 0000000..17a9421
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite9.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.testsuites;
+
+import java.util.Collection;
+import java.util.HashSet;
+import junit.framework.TestSuite;
+import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.internal.processors.cache.IgniteCacheGetCustomCollectionsSelfTest;
+import org.apache.ignite.internal.processors.cache.IgniteCacheLoadRebalanceEvictionSelfTest;
+import org.apache.ignite.internal.processors.cache.distributed.CacheAtomicPrimarySyncBackPressureTest;
+import org.apache.ignite.internal.processors.cache.distributed.IgniteTxConcurrentRemoveObjectsTest;
+
+/**
+ * Test suite.
+ */
+public class IgniteCacheMvccTestSuite9 extends TestSuite {
+ /**
+ * @return IgniteCache test suite.
+ */
+ public static TestSuite suite() {
+ System.setProperty(IgniteSystemProperties.IGNITE_FORCE_MVCC_MODE_IN_TESTS, "true");
+
+ Collection<Class> ignoredTests = new HashSet<>();
+
+ // Skip classes that already contains Mvcc tests
+ ignoredTests.add(IgniteTxConcurrentRemoveObjectsTest.class);
+
+ // Atomic caches.
+ ignoredTests.add(CacheAtomicPrimarySyncBackPressureTest.class);
+
+ // Other non-tx tests.
+ ignoredTests.add(IgniteCacheGetCustomCollectionsSelfTest.class);
+ ignoredTests.add(IgniteCacheLoadRebalanceEvictionSelfTest.class);
+
+ TestSuite suite = new TestSuite("IgniteCache Mvcc Test Suite part 9");
+
+ suite.addTest(IgniteCacheTestSuite9.suite(ignoredTests));
+
+ return suite;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bc895ac6/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite9.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite9.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite9.java
index 157673e..23d71c1 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite9.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite9.java
@@ -17,6 +17,7 @@
package org.apache.ignite.testsuites;
+import java.util.Collection;
import junit.framework.TestSuite;
import org.apache.ignite.internal.processors.cache.CachePutIfAbsentTest;
import org.apache.ignite.internal.processors.cache.IgniteCacheGetCustomCollectionsSelfTest;
@@ -28,6 +29,7 @@ import org.apache.ignite.internal.processors.cache.distributed.IgniteTxCachePrim
import org.apache.ignite.internal.processors.cache.distributed.IgniteTxCacheWriteSynchronizationModesMultithreadedTest;
import org.apache.ignite.internal.processors.cache.distributed.IgniteTxConcurrentRemoveObjectsTest;
import org.apache.ignite.internal.processors.cache.transactions.TxDataConsistencyOnCommitFailureTest;
+import org.apache.ignite.testframework.GridTestUtils;
/**
* Test suite.
@@ -35,25 +37,32 @@ import org.apache.ignite.internal.processors.cache.transactions.TxDataConsistenc
public class IgniteCacheTestSuite9 extends TestSuite {
/**
* @return IgniteCache test suite.
- * @throws Exception Thrown in case of the failure.
*/
- public static TestSuite suite() throws Exception {
+ public static TestSuite suite() {
+ return suite(null);
+ }
+
+ /**
+ * @param ignoredTests Ignored tests.
+ * @return IgniteCache test suite.
+ */
+ public static TestSuite suite(Collection<Class> ignoredTests) {
TestSuite suite = new TestSuite("IgniteCache Test Suite part 9");
- suite.addTestSuite(IgniteCacheGetCustomCollectionsSelfTest.class);
- suite.addTestSuite(IgniteCacheLoadRebalanceEvictionSelfTest.class);
- suite.addTestSuite(IgniteCachePrimarySyncTest.class);
- suite.addTestSuite(IgniteTxCachePrimarySyncTest.class);
- suite.addTestSuite(IgniteTxCacheWriteSynchronizationModesMultithreadedTest.class);
- suite.addTestSuite(CachePutIfAbsentTest.class);
+ GridTestUtils.addTestIfNeeded(suite, IgniteCacheGetCustomCollectionsSelfTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, IgniteCacheLoadRebalanceEvictionSelfTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, IgniteCachePrimarySyncTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, IgniteTxCachePrimarySyncTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, IgniteTxCacheWriteSynchronizationModesMultithreadedTest.class, ignoredTests);
+ GridTestUtils.addTestIfNeeded(suite, CachePutIfAbsentTest.class, ignoredTests);
- suite.addTestSuite(CacheAtomicPrimarySyncBackPressureTest.class);
+ GridTestUtils.addTestIfNeeded(suite, CacheAtomicPrimarySyncBackPressureTest.class, ignoredTests);
- suite.addTestSuite(IgniteTxConcurrentRemoveObjectsTest.class);
+ GridTestUtils.addTestIfNeeded(suite, IgniteTxConcurrentRemoveObjectsTest.class, ignoredTests);
- suite.addTestSuite(TxDataConsistencyOnCommitFailureTest.class);
+ GridTestUtils.addTestIfNeeded(suite, TxDataConsistencyOnCommitFailureTest.class, ignoredTests);
- suite.addTestSuite(CacheOperationsInterruptTest.class);
+ GridTestUtils.addTestIfNeeded(suite, CacheOperationsInterruptTest.class, ignoredTests);
return suite;
}