You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ti...@apache.org on 2025/04/14 15:47:10 UTC
(ignite) branch master updated: IGNITE-25039 Fix suboptimal expire shift calculation (#11984)
This is an automated email from the ASF dual-hosted git repository.
timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new ae9f6396de5 IGNITE-25039 Fix suboptimal expire shift calculation (#11984)
ae9f6396de5 is described below
commit ae9f6396de5caf1f769e484797282e6102118598
Author: Maksim Timonin <ti...@apache.org>
AuthorDate: Mon Apr 14 18:47:04 2025 +0300
IGNITE-25039 Fix suboptimal expire shift calculation (#11984)
---
.../GridCommandHandlerIndexRebuildStatusTest.java | 2 +-
.../util/GridCommandHandlerIndexingUtils.java | 2 +-
.../apache/ignite/util/GridCommandHandlerTest.java | 2 +-
.../cache/distribution/CacheDistributionTask.java | 6 +--
.../FindAndDeleteGarbageInPersistenceClosure.java | 4 +-
.../cache/IndexRebuildStatusInfoContainer.java | 2 +-
.../cache/VerifyBackupPartitionsTask.java | 4 +-
.../dht/topology/GridClientPartitionTopology.java | 12 +++++-
.../dht/topology/GridDhtPartitionTopology.java | 11 ++++-
.../dht/topology/GridDhtPartitionTopologyImpl.java | 47 +++++++++++++++++-----
.../dht/topology/PartitionsEvictManager.java | 2 +-
.../cache/persistence/GridCacheOffheapManager.java | 25 ++----------
.../persistence/checkpoint/CheckpointWorkflow.java | 5 +--
.../CachePartitionLossWithPersistenceTest.java | 2 +-
.../cache/query/CacheScanQueryFailoverTest.java | 2 +-
.../warmup/LoadAllWarmUpStrategySelfTest.java | 2 +-
.../snapshot/IgniteClusterSnapshotMetricsTest.java | 4 +-
17 files changed, 77 insertions(+), 57 deletions(-)
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexRebuildStatusTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexRebuildStatusTest.java
index 30718a11503..092e6bf6b38 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexRebuildStatusTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexRebuildStatusTest.java
@@ -280,7 +280,7 @@ public class GridCommandHandlerIndexRebuildStatusTest extends GridCommandHandler
private void checkRebuildStartOutput(String output, int nodeIdx, String grpName, String cacheName) {
IgniteEx ignite = grid(nodeIdx);
- int locPartsCnt = ignite.context().cache().cache(cacheName).context().topology().localPartitions().size();
+ int locPartsCnt = ignite.context().cache().cache(cacheName).context().topology().localPartitionsNumber();
assertContains(
log,
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingUtils.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingUtils.java
index cdd0e6181a4..c54f37dffa6 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingUtils.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingUtils.java
@@ -263,7 +263,7 @@ public class GridCommandHandlerIndexingUtils {
GridCacheContext<K, V> cacheCtx = internalCache.context();
- GridDhtLocalPartition locPart = cacheCtx.topology().localPartitions().get(partId);
+ GridDhtLocalPartition locPart = cacheCtx.topology().localPartition(partId);
GridIterator<CacheDataRow> cacheDataGridIter = cacheCtx.group().offheap().partitionIterator(locPart.id());
GridQueryProcessor qryProc = internalCache.context().kernalContext().query();
diff --git a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index fd456cd1a59..b6ea6577ea3 100644
--- a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -3910,7 +3910,7 @@ public class GridCommandHandlerTest extends GridCommandHandlerClusterPerMethodAb
ig.snapshot().createSnapshot(snpName).get(getTestTimeout());
- int locPartsCnt = ig.cachex(DEFAULT_CACHE_NAME).context().topology().localPartitions().size();
+ int locPartsCnt = ig.cachex(DEFAULT_CACHE_NAME).context().topology().localPartitionsNumber();
ig.destroyCache(DEFAULT_CACHE_NAME);
awaitPartitionMapExchange();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/distribution/CacheDistributionTask.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/distribution/CacheDistributionTask.java
index 03cc7430289..3b3772a847f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/distribution/CacheDistributionTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/cache/distribution/CacheDistributionTask.java
@@ -140,11 +140,7 @@ public class CacheDistributionTask extends VisorMultiNodeTask<CacheDistributionC
final AffinityAssignment assignment = grpCtx.affinity().readyAffinity(top.readyTopologyVersion());
- List<GridDhtLocalPartition> locParts = top.localPartitions();
-
- for (int i = 0; i < locParts.size(); i++) {
- GridDhtLocalPartition part = locParts.get(i);
-
+ for (GridDhtLocalPartition part: top.currentLocalPartitions()) {
if (part == null)
continue;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/FindAndDeleteGarbageInPersistenceClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/FindAndDeleteGarbageInPersistenceClosure.java
index e648ef6f03b..7d5430fdc27 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/FindAndDeleteGarbageInPersistenceClosure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/FindAndDeleteGarbageInPersistenceClosure.java
@@ -197,9 +197,7 @@ public class FindAndDeleteGarbageInPersistenceClosure implements IgniteCallable<
for (Integer grpId : grpIds) {
CacheGroupContext grpCtx = ignite.context().cache().cacheGroup(grpId);
- List<GridDhtLocalPartition> parts = grpCtx.topology().localPartitions();
-
- for (GridDhtLocalPartition part : parts)
+ for (GridDhtLocalPartition part : grpCtx.topology().currentLocalPartitions())
partArgs.add(new T2<>(grpCtx, part));
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IndexRebuildStatusInfoContainer.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IndexRebuildStatusInfoContainer.java
index a88f316e819..43fe6e8eedf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IndexRebuildStatusInfoContainer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/IndexRebuildStatusInfoContainer.java
@@ -65,7 +65,7 @@ public class IndexRebuildStatusInfoContainer extends IgniteDataTransferObject {
groupName = cfg.getGroupName() == null ? EMPTY_GROUP_NAME : cfg.getGroupName();
cacheName = cfg.getName();
indexBuildPartitionsLeftCount = cctx.cache().metrics0().getIndexBuildPartitionsLeftCount();
- totalPartitionsCount = cctx.topology().localPartitions().size();
+ totalPartitionsCount = cctx.topology().localPartitionsNumber();
}
/** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTask.java
index a67cce7c36f..2fe0378fa5d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/VerifyBackupPartitionsTask.java
@@ -345,11 +345,9 @@ public class VerifyBackupPartitionsTask extends ComputeTaskAdapter<CacheIdleVeri
if (grpCtx == null)
continue;
- List<GridDhtLocalPartition> parts = grpCtx.topology().localPartitions();
-
ForkJoinPool pool = poolSupplier.get();
- for (GridDhtLocalPartition part : parts)
+ for (GridDhtLocalPartition part : grpCtx.topology().currentLocalPartitions())
partHashCalcFutures.add(calculatePartitionHashAsync(pool, grpCtx, part, this::isCancelled));
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
index 6adbb53a692..c71b9c3d163 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
@@ -489,7 +489,17 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
}
/** {@inheritDoc} */
- @Override public Collection<GridDhtLocalPartition> currentLocalPartitions() {
+ @Override public int localPartitionsNumber() {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Iterable<GridDhtLocalPartition> currentLocalPartitions() {
+ return Collections.emptyList();
+ }
+
+ /** {@inheritDoc} */
+ @Override public Iterable<GridDhtLocalPartition> shiftedCurrentLocalPartitions() {
return Collections.emptyList();
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopology.java
index 6071a7cc917..8efc3ee8ebb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopology.java
@@ -202,11 +202,20 @@ public interface GridDhtPartitionTopology {
public List<GridDhtLocalPartition> localPartitions();
/**
- *
+ * @return Number of active local partitions.
+ */
+ public int localPartitionsNumber();
+
+ /**
* @return All current active local partitions.
*/
public Iterable<GridDhtLocalPartition> currentLocalPartitions();
+ /**
+ * @return All current active local partitions shifted by random index to reduce contention.
+ */
+ public Iterable<GridDhtLocalPartition> shiftedCurrentLocalPartitions();
+
/**
* @return Local IDs.
*/
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
index 009572b0e6f..c8c4ebd5c02 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
@@ -29,6 +29,7 @@ import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicReferenceArray;
import java.util.stream.Collectors;
import org.apache.ignite.IgniteCheckedException;
@@ -1079,11 +1080,34 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
return list;
}
+ /** {@inheritDoc} */
+ @Override public int localPartitionsNumber() {
+ int num = 0;
+
+ for (int i = 0; i < locParts.length(); i++) {
+ GridDhtLocalPartition part = locParts.get(i);
+
+ if (part != null && part.state().active())
+ num++;
+ }
+
+ return num;
+ }
+
/** {@inheritDoc} */
@Override public Iterable<GridDhtLocalPartition> currentLocalPartitions() {
- return new Iterable<GridDhtLocalPartition>() {
+ return new Iterable<>() {
@Override public Iterator<GridDhtLocalPartition> iterator() {
- return new CurrentPartitionsIterator();
+ return new CurrentPartitionsIterator(0);
+ }
+ };
+ }
+
+ /** {@inheritDoc} */
+ @Override public Iterable<GridDhtLocalPartition> shiftedCurrentLocalPartitions() {
+ return new Iterable<>() {
+ @Override public Iterator<GridDhtLocalPartition> iterator() {
+ return new CurrentPartitionsIterator(ThreadLocalRandom.current().nextInt(locParts.length()));
}
};
}
@@ -2826,11 +2850,9 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
part.clearDeferredDeletes();
- List<GridDhtLocalPartition> parts = localPartitions();
-
boolean renting = false;
- for (GridDhtLocalPartition part0 : parts) {
+ for (GridDhtLocalPartition part0 : currentLocalPartitions()) {
if (part0.state() == RENTING) {
renting = true;
@@ -3279,6 +3301,9 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
* Iterator over current local partitions.
*/
private class CurrentPartitionsIterator implements Iterator<GridDhtLocalPartition> {
+ /** Shift index. */
+ private final int shiftIdx;
+
/** Next index. */
private int nextIdx;
@@ -3286,9 +3311,11 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
private GridDhtLocalPartition nextPart;
/**
- * Constructor
+ * @param shiftIdx Shift start index for {@link #locParts} to reduce partitions contention.
*/
- private CurrentPartitionsIterator() {
+ private CurrentPartitionsIterator(int shiftIdx) {
+ this.shiftIdx = shiftIdx;
+
advance();
}
@@ -3296,8 +3323,10 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
* Try to advance to next partition.
*/
private void advance() {
- while (nextIdx < locParts.length()) {
- GridDhtLocalPartition part = locParts.get(nextIdx);
+ int len = locParts.length();
+
+ while (nextIdx < len) {
+ GridDhtLocalPartition part = locParts.get((shiftIdx + nextIdx) % len);
if (part != null && part.state().active()) {
nextPart = part;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java
index 6a718988188..f4e2bb1a24b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionsEvictManager.java
@@ -355,7 +355,7 @@ public class PartitionsEvictManager extends GridCacheSharedManagerAdapter {
", grpId=" + grp.groupId() +
", remainingPartsToEvict=" + (totalTasks.get() - taskInProgress) +
", partsEvictInProgress=" + taskInProgress +
- ", totalParts=" + grp.topology().localPartitions().size() + "]");
+ ", totalParts=" + grp.topology().localPartitionsNumber() + "]");
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 5056f063189..28911df7c78 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -30,7 +30,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Stream;
@@ -1109,29 +1108,13 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
try {
int cleared = 0;
- // Use random shift to reduce contention.
- int shift = ThreadLocalRandom.current().nextInt(F.size(cacheDataStores().iterator()));
+ for (GridDhtLocalPartition part : grp.topology().shiftedCurrentLocalPartitions()) {
+ GridCacheDataStore store = (GridCacheDataStore)part.dataStore();
- int cnt = 0;
- for (CacheDataStore store : cacheDataStores()) {
- if (cnt++ < shift) // On the first iteration skip entries before <shift>.
+ if (store.destroyed())
continue;
- cleared += ((GridCacheDataStore)store).purgeExpired(cctx, c, unwindThrottlingTimeout, amount - cleared);
-
- if (amount != -1 && cleared >= amount)
- return true;
- }
-
- if (shift == 0)
- return false;
-
- cnt = 0;
- for (CacheDataStore store : cacheDataStores()) {
- if (cnt++ >= shift) // On the second iteration skip entries after <shift>.
- break;
-
- cleared += ((GridCacheDataStore)store).purgeExpired(cctx, c, unwindThrottlingTimeout, amount - cleared);
+ cleared += store.purgeExpired(cctx, c, unwindThrottlingTimeout, amount - cleared);
if (amount != -1 && cleared >= amount)
return true;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
index 9862fa0db03..ef369d24a0b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
@@ -379,10 +379,7 @@ public class CheckpointWorkflow {
continue;
Runnable r = () -> {
- ArrayList<GridDhtLocalPartition> parts = new ArrayList<>(grp.topology().localPartitions().size());
-
- for (GridDhtLocalPartition part : grp.topology().currentLocalPartitions())
- parts.add(part);
+ List<GridDhtLocalPartition> parts = grp.topology().localPartitions();
CacheState state = new CacheState(parts.size());
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CachePartitionLossWithPersistenceTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CachePartitionLossWithPersistenceTest.java
index 6209c057b6a..92e071e5b1e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CachePartitionLossWithPersistenceTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CachePartitionLossWithPersistenceTest.java
@@ -208,7 +208,7 @@ public class CachePartitionLossWithPersistenceTest extends GridCommonAbstractTes
final Collection<Integer> lostParts = crd.cache(DEFAULT_CACHE_NAME).lostPartitions();
- assertEquals(PARTS_CNT, cachex.context().topology().localPartitions().size() + lostParts.size());
+ assertEquals(PARTS_CNT, cachex.context().topology().localPartitionsNumber() + lostParts.size());
assertTrue(lostParts.contains(part));
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
index 06235b6a88e..b8bd6fe3458 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
@@ -131,7 +131,7 @@ public class CacheScanQueryFailoverTest extends GridCommonAbstractTest {
cache2.put(i, i); // Put to partition 1.
Iterator iter1 = cache1.query(new ScanQuery<>().setPageSize(1)).iterator();
- Iterator iter2 = cache1.query(new ScanQuery<>().setPageSize(1)).iterator();
+ Iterator iter2 = cache2.query(new ScanQuery<>().setPageSize(1)).iterator();
// Iter 1 check case, when cursor is switched to evicted partition.
iter1.next();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/warmup/LoadAllWarmUpStrategySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/warmup/LoadAllWarmUpStrategySelfTest.java
index 5495037795a..2a0c1e504e8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/warmup/LoadAllWarmUpStrategySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/warmup/LoadAllWarmUpStrategySelfTest.java
@@ -232,7 +232,7 @@ public class LoadAllWarmUpStrategySelfTest extends GridCommonAbstractTest {
return n.context().cache().cacheGroups().stream()
.filter(grpCtx -> grpCtx.userCache() && grpCtx.persistenceEnabled())
// Check for exists gap in local partitions.
- .peek(grpCtx -> assertTrue(grpCtx.topology().localPartitions().size() < grpCtx.topology().partitions()))
+ .peek(grpCtx -> assertTrue(grpCtx.topology().localPartitionsNumber() < grpCtx.topology().partitions()))
.map(CacheGroupContext::dataRegion)
.distinct()
.collect(toMap(region -> region.config().getName(), region -> region.pageMemory().loadedPages()));
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
index c40ec08f125..e4dcf1c2624 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
@@ -150,8 +150,8 @@ public class IgniteClusterSnapshotMetricsTest extends IgniteClusterSnapshotResto
assertTrue(nodeNameMsg, GridTestUtils.waitForCondition(() -> getNumMetric("endTime", mReg) > 0, TIMEOUT));
- int expParts = ((IgniteEx)grid).cachex(ccfg1.getName()).context().topology().localPartitions().size() +
- ((IgniteEx)grid).cachex(ccfg2.getName()).context().topology().localPartitions().size();
+ int expParts = ((IgniteEx)grid).cachex(ccfg1.getName()).context().topology().localPartitionsNumber() +
+ ((IgniteEx)grid).cachex(ccfg2.getName()).context().topology().localPartitionsNumber();
// Cache2 is replicated - the index partition is being copied (on snapshot data nodes).
if (!emptyNode.name().equals(grid.name()))