ignite-6467
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8d13369a Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8d13369a Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8d13369a Branch: refs/heads/ignite-6467-1 Commit: 8d13369add28d8cb7198f8d5c7ce4e8cf0cb037a Parents: 102b0f3 Author: sboikov <sboi...@apache.org> Authored: Tue Jul 24 13:29:58 2018 +0300 Committer: sboikov <sboi...@apache.org> Committed: Tue Jul 24 13:29:58 2018 +0300 ---------------------------------------------------------------------- ...niteCacheClientNodeChangingTopologyTest.java | 95 ++++++++++++++++++++ .../testsuites/IgniteCacheTestSuite6.java | 13 +-- 2 files changed, 98 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/8d13369a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheClientNodeChangingTopologyTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheClientNodeChangingTopologyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheClientNodeChangingTopologyTest.java index c82b4b9..10c5f37 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheClientNodeChangingTopologyTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheClientNodeChangingTopologyTest.java @@ -45,6 +45,7 @@ import org.apache.ignite.IgniteTransactions; import org.apache.ignite.cache.CacheAtomicityMode; import org.apache.ignite.cache.affinity.Affinity; import org.apache.ignite.cache.affinity.AffinityFunction; +import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; @@ -504,6 +505,7 @@ public class IgniteCacheClientNodeChangingTopologyTest extends GridCommonAbstrac checkData(map, null, cache, 4); } + /** * @throws Exception If failed. */ @@ -928,6 +930,87 @@ public class IgniteCacheClientNodeChangingTopologyTest extends GridCommonAbstrac } /** + * @return Cache configuration. + */ + private CacheConfiguration testPessimisticTx3Cfg() { + CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME); + + ccfg.setCacheMode(PARTITIONED); + ccfg.setBackups(0); + ccfg.setAtomicityMode(TRANSACTIONAL); + ccfg.setWriteSynchronizationMode(FULL_SYNC); + ccfg.setRebalanceMode(SYNC); + ccfg.setAffinity(new RendezvousAffinityFunction(false, 16)); + + return ccfg; + } + + /** + * @throws Exception If failed. + */ + public void testPessimisticTx3() throws Exception { + for (int iter = 0; iter < 5; iter++) { + info("Iteration: " + iter); + + ccfg = testPessimisticTx3Cfg(); + + IgniteEx ignite0 = startGrid(0); + + Map<Integer, Integer> map = new HashMap<>(); + + final IgniteCache<Integer, Integer> cache0 = ignite0.cache(DEFAULT_CACHE_NAME); + + for (int i = 0; i < 10000; i++) { + cache0.put(i, i); + map.put(i, i + 1); + } + + client = true; + + ccfg = testPessimisticTx3Cfg(); + + final Ignite ignite3 = startGrid(3); + + final IgniteCache<Integer, Integer> cache = ignite3.cache(DEFAULT_CACHE_NAME); + + TestCommunicationSpi spi = (TestCommunicationSpi)ignite3.configuration().getCommunicationSpi(); + spi.blockMessages(GridNearLockRequest.class, ignite0.localNode().id()); + + IgniteInternalFuture putFut = GridTestUtils.runAsync(new Callable<Object>() { + @Override public Object call() throws Exception { + Thread.currentThread().setName("put-thread"); + + try (Transaction tx = ignite3.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { + cache.putAll(map); + + tx.commit(); + } + + return null; + } + }); + + spi.waitForBlocked(); + + client = false; + + ccfg = testPessimisticTx3Cfg(); + + startGrid(1); + + // Want provoke case when client req is processed when target partition is RENTING, + // there is no easy way to do it, so just try sleep. + U.sleep(ThreadLocalRandom.current().nextInt(1000) + 100); + + spi.stopBlock(); + + putFut.get(); + + stopAllGrids(); + } + } + + /** * @throws Exception If failed. */ public void testOptimisticSerializableTx() throws Exception { @@ -2004,6 +2087,8 @@ public class IgniteCacheClientNodeChangingTopologyTest extends GridCommonAbstrac blockedMsgs.add(new T2<>(node, (GridIoMessage)msg)); + notifyAll(); + return; } } @@ -2072,6 +2157,16 @@ public class IgniteCacheClientNodeChangingTopologyTest extends GridCommonAbstrac blockedMsgs.clear(); } } + + /** + * @throws InterruptedException If interrupted. + */ + public void waitForBlocked() throws InterruptedException { + synchronized (this) { + while (blockedMsgs.isEmpty()) + wait(); + } + } } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/8d13369a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java index bfe3d00..fe2a823 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java @@ -33,14 +33,7 @@ import org.apache.ignite.internal.processors.cache.WalModeChangeAdvancedSelfTest import org.apache.ignite.internal.processors.cache.WalModeChangeCoordinatorNotAffinityNodeSelfTest; import org.apache.ignite.internal.processors.cache.WalModeChangeSelfTest; import org.apache.ignite.internal.processors.cache.datastructures.IgniteExchangeLatchManagerCoordinatorFailTest; -import org.apache.ignite.internal.processors.cache.distributed.CacheExchangeMergeTest; -import org.apache.ignite.internal.processors.cache.distributed.CachePartitionStateTest; -import org.apache.ignite.internal.processors.cache.distributed.GridCachePartitionEvictionDuringReadThroughSelfTest; -import org.apache.ignite.internal.processors.cache.distributed.IgniteCache150ClientsTest; -import org.apache.ignite.internal.processors.cache.distributed.IgniteCacheThreadLocalTxTest; -import org.apache.ignite.internal.processors.cache.distributed.IgniteOptimisticTxSuspendResumeMultiServerTest; -import org.apache.ignite.internal.processors.cache.distributed.IgniteOptimisticTxSuspendResumeTest; -import org.apache.ignite.internal.processors.cache.distributed.IgnitePessimisticTxSuspendResumeTest; +import org.apache.ignite.internal.processors.cache.distributed.*; import org.apache.ignite.internal.processors.cache.persistence.IgnitePdsCacheAssignmentNodeRestartsTest; import org.apache.ignite.internal.processors.cache.transactions.TxLabelTest; import org.apache.ignite.internal.processors.cache.transactions.TxMultiCacheAsyncOpsTest; @@ -67,8 +60,8 @@ public class IgniteCacheTestSuite6 extends TestSuite { public static TestSuite suite() throws Exception { TestSuite suite = new TestSuite("IgniteCache Test Suite part 6"); - for (int i = 0; i < 2; i++) - suite.addTestSuite(CacheExchangeMergeTest.class); + suite.addTestSuite(CacheExchangeMergeTest.class); + suite.addTestSuite(IgniteCacheClientNodeChangingTopologyTest.class); return suite; }