From ec04cd174ed5476fba83e8682214390736321b37 Mon Sep 17 00:00:00 2001 From: Pavel Kovalenko Date: Tue, 24 Apr 2018 16:08:21 +0300 Subject: [PATCH] IGNITE-8339 Fixed partition state detection on activation - Fixes #3885. Signed-off-by: Alexey Goncharuk --- .../processors/cache/GridCacheContext.java | 2 +- .../dht/GridDhtPartitionTopologyImpl.java | 110 +++++++++-------- .../GridDhtPartitionsExchangeFuture.java | 10 +- ...ActivateDeactivateTestWithPersistence.java | 113 +++++++++++++++++- .../CacheLateAffinityAssignmentTest.java | 2 +- ...IgnitePdsCacheRebalancingAbstractTest.java | 4 +- 6 files changed, 180 insertions(+), 61 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java index f194423320737..c5f4d3c9c993a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java @@ -2072,7 +2072,7 @@ public boolean reserveForFastLocalGet(int part, AffinityTopologyVersion topVer) topology().partitionState(localNodeId(), part) == OWNING : "result=" + result + ", persistenceEnabled=" + group().persistenceEnabled() + ", partitionState=" + topology().partitionState(localNodeId(), part) + - ", replicated=" + isReplicated(); + ", replicated=" + isReplicated() + ", part=" + part; return result; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java index 68104a5349283..71d43c8ebc55c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java @@ -370,10 +370,7 @@ private boolean initPartitions(AffinityTopologyVersion affVer, List addedKeys = new GridConcurrentHashSet<>(); + + IgniteInternalFuture cacheLoadFuture = GridTestUtils.runMultiThreadedAsync(() -> { + while (!stop.get()) { + int key = keyCounter.incrementAndGet(); + try { + cache.put(key, key); + + addedKeys.add(key); + + Thread.sleep(10); + } + catch (Exception ignored) { } + } + }, 2, "cache-load"); + + stopGrid(2); + + // Wait for some data. + Thread.sleep(3000); + + startGrid(2); + + log.info("Stop load..."); + + stop.set(true); + + cacheLoadFuture.get(); + + // Deactivate and activate again. + srv.cluster().active(false); + + srv.cluster().active(true); + + awaitPartitionMapExchange(); + + log.info("Checking data..."); + + for (Ignite ignite : G.allGrids()) { + IgniteCache cache1 = ignite.getOrCreateCache(DEFAULT_CACHE_NAME); + + for (int k = 1; k <= keysCount; k++) { + Object val = cache1.get(k); + + Assert.assertNotNull("node=" + ignite.name() + ", key=" + k, val); + + Assert.assertTrue("node=" + ignite.name() + ", key=" + k + ", val=" + val, (int) val == k); + } + + for (int k : addedKeys) { + Object val = cache1.get(k); + + Assert.assertNotNull("node=" + ignite.name() + ", key=" + k, val); + + Assert.assertTrue("node=" + ignite.name() + ", key=" + k + ", val=" + val, (int) val == k); + } + } + } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java index 787095e605cf1..0b6fd83c60c26 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java @@ -186,7 +186,7 @@ public class CacheLateAffinityAssignmentTest extends GridCommonAbstractTest { DataStorageConfiguration cfg1 = new DataStorageConfiguration(); - cfg1.setDefaultDataRegionConfiguration(new DataRegionConfiguration().setMaxSize(150 * 1024 * 1024L)); + cfg1.setDefaultDataRegionConfiguration(new DataRegionConfiguration().setMaxSize(512 * 1024 * 1024L)); cfg.setDataStorageConfiguration(cfg1); diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheRebalancingAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheRebalancingAbstractTest.java index 0dd9c788b7f6c..c0c2be9f86943 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheRebalancingAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheRebalancingAbstractTest.java @@ -584,7 +584,7 @@ public void testPartitionCounterConsistencyOnUnstableTopology() throws Exception try (IgniteDataStreamer ds = ig.dataStreamer(cacheName)) { ds.allowOverwrite(true); - for (int k0 = k; k < k0 + 50_000; k++) + for (int k0 = k; k < k0 + 10_000; k++) ds.addData(k, k); } @@ -631,7 +631,7 @@ public void testPartitionCounterConsistencyOnUnstableTopology() throws Exception for (;k < k0 + 3; k++) ds.addData(k, k); - U.sleep(1); + U.sleep(10); } } catch (Exception e) {