From 992d82a2f8d6ad9d231295a912ff8a698f126c06 Mon Sep 17 00:00:00 2001 From: "Valuyskiy.O.Y" Date: Fri, 6 Mar 2026 10:06:59 +1000 Subject: [PATCH 1/2] IGNITE-28085 Add the EvictionsStarted metric to DataStorageMetricsImpl --- .../persistence/DataStorageMetricsImpl.java | 20 ++++++++++ .../IgniteCacheDatabaseSharedManager.java | 10 +++++ .../IgniteDataStorageMetricsSelfTest.java | 38 ++++++++++++++++++- 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java index 0ba6e04a99343..7eff728782f48 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.persistence; import java.util.Collection; +import java.util.function.BooleanSupplier; import org.apache.ignite.DataRegionMetrics; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord; @@ -173,6 +174,9 @@ public class DataStorageMetricsImpl { /** Total size of the compressed segments in bytes. */ private final LongAdderMetric walCompressedBytes; + /** Supplier for the eviction-started flag. */ + private volatile BooleanSupplier evictionsStartedSupplier = () -> false; + /** * @param mmgr Metrics manager. * @param metricsEnabled Metrics enabled flag. @@ -372,6 +376,12 @@ public DataStorageMetricsImpl( "Used checkpoint buffer size in bytes."); mreg.register("CheckpointBufferSize", this::checkpointBufferSize, "Checkpoint buffer size in bytes."); + + mreg.register( + "EvictionsStarted", + this::evictionsStarted, + "True if page eviction was triggered due to data region memory pressure." + ); } /** @return Current number of WAL segments in the WAL archive. */ @@ -810,4 +820,14 @@ public void onWalSegmentCompressed(long size) { walCompressedBytes.add(size); } + + /** @param supplier Supplier for the eviction-started flag. */ + public void setEvictionsStartedSupplier(BooleanSupplier supplier) { + evictionsStartedSupplier = (supplier == null) ? () -> false : supplier; + } + + /** @return {@code true} if page eviction was triggered due to data region memory pressure. */ + private boolean evictionsStarted() { + return evictionsStartedSupplier.getAsBoolean(); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java index d8b14ce718a1f..2e6d0c065ceca 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java @@ -198,6 +198,8 @@ public IgniteCacheDatabaseSharedManager(GridKernalContext ctx) { DFLT_SUB_INTERVALS ); } + + dsMetrics.setEvictionsStartedSupplier(this::evictionsStarted); } /** {@inheritDoc} */ @@ -1660,4 +1662,12 @@ private void checkRegionWarmUpConfiguration( public void onWalTruncated(WALPointer highBound) throws IgniteCheckedException { // No-op. } + + /** + * @return Value of the {@link IgniteCacheDatabaseSharedManager#firstEvictWarn} flag, where {@code true} indicates + * that the eviction process has started. + */ + public boolean evictionsStarted() { + return firstEvictWarn; + } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java index 9cff28d988252..ffc0fa1755492 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java @@ -52,6 +52,7 @@ import org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor; import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager; import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric; +import org.apache.ignite.internal.processors.metric.impl.BooleanGauge; import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric; import org.apache.ignite.internal.processors.metric.impl.LongGauge; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -63,14 +64,17 @@ import org.apache.ignite.spi.metric.HistogramMetric; import org.apache.ignite.spi.metric.LongMetric; import org.apache.ignite.testframework.ListeningTestLogger; +import org.apache.ignite.testframework.LogListener; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; import org.junit.Test; import static java.util.Collections.emptyList; +import static org.apache.commons.lang3.StringUtils.repeat; import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC; import static org.apache.ignite.cache.CacheMode.PARTITIONED; import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC; import static org.apache.ignite.cluster.ClusterState.ACTIVE; +import static org.apache.ignite.configuration.DataPageEvictionMode.RANDOM_LRU; import static org.apache.ignite.internal.processors.cache.CacheGroupMetricsImpl.CACHE_GROUP_METRICS_PREFIX; import static org.apache.ignite.internal.processors.cache.persistence.DataStorageMetricsImpl.DATASTORAGE_METRIC_PREFIX; import static org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.HEADER_RECORD_SIZE; @@ -137,7 +141,8 @@ public class IgniteDataStorageMetricsSelfTest extends GridCommonAbstractTest { .setMaxSize(maxRegionSize) .setPersistenceEnabled(false) .setMetricsEnabled(true) - .setName(NO_PERSISTENCE)) + .setName(NO_PERSISTENCE) + .setPageEvictionMode(RANDOM_LRU)) .setWalMode(WALMode.LOG_ONLY) .setMetricsEnabled(true); @@ -505,6 +510,37 @@ public void testWalTotalSizeWithArchiveTurnedOff() throws Exception { checkWalArchiveAndTotalSize(n, false); } + /** Verifies that the 'EvictionsStarted' metric becomes {@code true} after page eviction is triggered. */ + @Test + public void testEvicstionsStartedMetric() throws Exception { + IgniteEx ignite = startGrid(0); + + ignite.cluster().state(ClusterState.ACTIVE); + + String msg = "Page-based evictions started. Consider increasing 'maxSize' on Data Region configuration"; + + LogListener lsnr = LogListener.matches(msg).build(); + + listeningLog.registerListener(lsnr); + + IgniteCache cacheNp = ignite.cache("cache-np"); + + String big = repeat('X', 256 * 1024); + + for (int i = 0; i < 1_000_000 && !lsnr.check(); i++) + cacheNp.put(i, new Person("first-" + i + "-" + big, "last-" + i + "-" + big)); + + assertTrue(lsnr.check()); + + MetricRegistry metrics = ignite.context().metric().registry(DATASTORAGE_METRIC_PREFIX); + assertNotNull(metrics); + + BooleanGauge evictStarted = metrics.findMetric("EvictionsStarted"); + assertNotNull(evictStarted); + + assertTrue(evictStarted.value()); + } + /** * Populates a cache w/32 KB of data. * From c51420e374c942600ae5d2db1329643e76bbffd9 Mon Sep 17 00:00:00 2001 From: "Valuyskiy.O.Y" Date: Mon, 9 Mar 2026 12:34:04 +1000 Subject: [PATCH 2/2] IGNITE-28085 Moved the EvictionsStarted metric from DataStorageMetricsImpl to DataRegionMetrics --- .../_docs/monitoring-metrics/new-metrics.adoc | 1 + .../org/apache/ignite/DataRegionMetrics.java | 7 ++ .../persistence/DataRegionMetricsImpl.java | 18 +++++ .../DataRegionMetricsSnapshot.java | 9 +++ .../persistence/DataStorageMetricsImpl.java | 20 ------ .../IgniteCacheDatabaseSharedManager.java | 12 +--- .../IgniteDataStorageMetricsSelfTest.java | 71 ++++++++++++++----- 7 files changed, 90 insertions(+), 48 deletions(-) diff --git a/docs/_docs/monitoring-metrics/new-metrics.adoc b/docs/_docs/monitoring-metrics/new-metrics.adoc index 19a2ca3121ef8..0850d9ae33116 100644 --- a/docs/_docs/monitoring-metrics/new-metrics.adoc +++ b/docs/_docs/monitoring-metrics/new-metrics.adoc @@ -394,6 +394,7 @@ Register name: `io.dataregion.{data_region_name}` |DirtyPages | long| Number of pages in memory not yet synchronized with persistent storage. |EmptyDataPages| long| Calculates empty data pages count for region. It counts only totally free pages that can be reused (e. g. pages that are contained in reuse bucket of free list). |EvictionRate| hitrate| Eviction rate (pages per second). +|EvictionsStarted | boolean | True if page eviction was triggered due to data region memory pressure. |LargeEntriesPagesCount| long| Count of pages that fully ocupied by large entries that go beyond page size |OffHeapSize| long| Offheap size in bytes. |OffheapUsedSize| long| Offheap used size in bytes. diff --git a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java index a1539e1e8b77e..28d7c4004bfb8 100644 --- a/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java +++ b/modules/core/src/main/java/org/apache/ignite/DataRegionMetrics.java @@ -241,4 +241,11 @@ public interface DataRegionMetrics { * @return Total used offheap size in bytes. */ public long getOffheapUsedSize(); + + /** + * Data region eviction-started flag. + * + * @return {@code true} if page eviction was triggered due to data region memory pressure. + */ + public boolean isEvictionsStarted(); } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java index 549ffc399f731..1e962331f1156 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java @@ -30,6 +30,7 @@ import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMetricsImpl; import org.apache.ignite.internal.processors.metric.MetricRegistryImpl; import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric; +import org.apache.ignite.internal.processors.metric.impl.BooleanMetricImpl; import org.apache.ignite.internal.processors.metric.impl.HitRateMetric; import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric; import org.apache.ignite.internal.processors.metric.impl.LongAdderWithDelegateMetric; @@ -178,6 +179,9 @@ private static LongAdderMetricDelegate delegate(LongAdderMetric delegate) { @Nullable private final PeriodicHistogramMetricImpl pageTsHistogram; + /** Metric indicating whether page eviction has started. */ + private final BooleanMetricImpl evictionsStarted; + /** * Same as {@link #DataRegionMetricsImpl(DataRegionConfiguration, GridKernalContext, DataRegionMetricsProvider)} * but uses a no-op implementation for the {@link DataRegionMetricsProvider}. @@ -281,6 +285,9 @@ public DataRegionMetricsImpl( mreg.longMetric("MaxSize", "Maximum memory region size in bytes defined by its data region.") .value(dataRegionCfg.getMaxSize()); + evictionsStarted = mreg.booleanMetric("EvictionsStarted", + "True if page eviction was triggered due to data region memory pressure."); + if (persistenceEnabled) { // Reserve 1 sec, page ts can be slightly lower than currentTimeMillis, due to applied to ts mask. This // reservation mainly affects only tests (we can check buckets more predictevely). @@ -875,4 +882,15 @@ public Collection pagesTimestampHistogramView() { return list; } + + /** {@inheritDoc} */ + @Override public boolean isEvictionsStarted() { + return evictionsStarted.value(); + } + + /** */ + public void onPageEvictionsStarted() { + if (!evictionsStarted.value()) + evictionsStarted.value(true); + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java index 316f98fe8753b..b56b9a9baf844 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsSnapshot.java @@ -92,6 +92,9 @@ public class DataRegionMetricsSnapshot implements DataRegionMetrics { /** */ private final long offHeapUsedSize; + /** */ + private final boolean evictionsStarted; + /** * @param metrics Metrics instance to take a copy. */ @@ -119,6 +122,7 @@ public DataRegionMetricsSnapshot(DataRegionMetrics metrics) { replacedPage = metrics.getPagesReplaced(); offHeapSize = metrics.getOffHeapSize(); offHeapUsedSize = metrics.getOffheapUsedSize(); + evictionsStarted = metrics.isEvictionsStarted(); } /** {@inheritDoc} */ @@ -235,4 +239,9 @@ public DataRegionMetricsSnapshot(DataRegionMetrics metrics) { @Override public long getOffheapUsedSize() { return offHeapUsedSize; } + + /** {@inheritDoc} */ + @Override public boolean isEvictionsStarted() { + return evictionsStarted; + } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java index 7eff728782f48..0ba6e04a99343 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataStorageMetricsImpl.java @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.cache.persistence; import java.util.Collection; -import java.util.function.BooleanSupplier; import org.apache.ignite.DataRegionMetrics; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord; @@ -174,9 +173,6 @@ public class DataStorageMetricsImpl { /** Total size of the compressed segments in bytes. */ private final LongAdderMetric walCompressedBytes; - /** Supplier for the eviction-started flag. */ - private volatile BooleanSupplier evictionsStartedSupplier = () -> false; - /** * @param mmgr Metrics manager. * @param metricsEnabled Metrics enabled flag. @@ -376,12 +372,6 @@ public DataStorageMetricsImpl( "Used checkpoint buffer size in bytes."); mreg.register("CheckpointBufferSize", this::checkpointBufferSize, "Checkpoint buffer size in bytes."); - - mreg.register( - "EvictionsStarted", - this::evictionsStarted, - "True if page eviction was triggered due to data region memory pressure." - ); } /** @return Current number of WAL segments in the WAL archive. */ @@ -820,14 +810,4 @@ public void onWalSegmentCompressed(long size) { walCompressedBytes.add(size); } - - /** @param supplier Supplier for the eviction-started flag. */ - public void setEvictionsStartedSupplier(BooleanSupplier supplier) { - evictionsStartedSupplier = (supplier == null) ? () -> false : supplier; - } - - /** @return {@code true} if page eviction was triggered due to data region memory pressure. */ - private boolean evictionsStarted() { - return evictionsStartedSupplier.getAsBoolean(); - } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java index 2e6d0c065ceca..a20a38e7093aa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java @@ -198,8 +198,6 @@ public IgniteCacheDatabaseSharedManager(GridKernalContext ctx) { DFLT_SUB_INTERVALS ); } - - dsMetrics.setEvictionsStartedSupplier(this::evictionsStarted); } /** {@inheritDoc} */ @@ -1248,6 +1246,8 @@ public void ensureFreeSpace(DataRegion memPlc) throws IgniteCheckedException { return; while (memPlc.evictionTracker().evictionRequired()) { + memPlc.metrics().onPageEvictionsStarted(); + warnFirstEvict(memPlc.config()); memPlc.evictionTracker().evictDataPage(); @@ -1662,12 +1662,4 @@ private void checkRegionWarmUpConfiguration( public void onWalTruncated(WALPointer highBound) throws IgniteCheckedException { // No-op. } - - /** - * @return Value of the {@link IgniteCacheDatabaseSharedManager#firstEvictWarn} flag, where {@code true} indicates - * that the eviction process has started. - */ - public boolean evictionsStarted() { - return firstEvictWarn; - } } diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java index ffc0fa1755492..dffaf8a29a9a2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java @@ -52,7 +52,6 @@ import org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor; import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager; import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric; -import org.apache.ignite.internal.processors.metric.impl.BooleanGauge; import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric; import org.apache.ignite.internal.processors.metric.impl.LongGauge; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -93,7 +92,10 @@ public class IgniteDataStorageMetricsSelfTest extends GridCommonAbstractTest { private static final String GROUP2 = "grp2"; /** */ - private static final String NO_PERSISTENCE = "no-persistence"; + private static final String NO_PERSISTENCE_1 = "no-persistence-1"; + + /** */ + private static final String NO_PERSISTENCE_2 = "no-persistence-2"; /** */ private static final String PERSISTENCE_REGION_1 = "persistence-1"; @@ -141,7 +143,13 @@ public class IgniteDataStorageMetricsSelfTest extends GridCommonAbstractTest { .setMaxSize(maxRegionSize) .setPersistenceEnabled(false) .setMetricsEnabled(true) - .setName(NO_PERSISTENCE) + .setName(NO_PERSISTENCE_1) + .setPageEvictionMode(RANDOM_LRU), + new DataRegionConfiguration() + .setMaxSize(maxRegionSize) + .setPersistenceEnabled(false) + .setMetricsEnabled(true) + .setName(NO_PERSISTENCE_2) .setPageEvictionMode(RANDOM_LRU)) .setWalMode(WALMode.LOG_ONLY) .setMetricsEnabled(true); @@ -153,7 +161,8 @@ public class IgniteDataStorageMetricsSelfTest extends GridCommonAbstractTest { cfg.setCacheConfiguration( cacheConfiguration(GROUP1, "cache", PARTITIONED, ATOMIC, 1, null), cacheConfiguration(GROUP2, "cache2", PARTITIONED, ATOMIC, 1, PERSISTENCE_REGION_2), - cacheConfiguration(null, "cache-np", PARTITIONED, ATOMIC, 1, NO_PERSISTENCE)); + cacheConfiguration(null, "cache-np", PARTITIONED, ATOMIC, 1, NO_PERSISTENCE_1), + cacheConfiguration(null, "cache-np2", PARTITIONED, ATOMIC, 1, NO_PERSISTENCE_2)); cfg.setGridLogger(listeningLog); @@ -196,7 +205,7 @@ private CacheConfiguration cacheConfiguration( ccfg.setDataRegionName(dataRegName); ccfg.setAffinity(new RendezvousAffinityFunction(false, 32)); - if (NO_PERSISTENCE.equals(dataRegName)) + if (NO_PERSISTENCE_1.equals(dataRegName)) ccfg.setDiskPageCompression(null); return ccfg; @@ -231,7 +240,7 @@ public void testPersistenceMetrics() throws Exception { assertTrue(memMetrics.getDirtyPages() > 0); assertTrue(memMetrics.getPagesFillFactor() > 0); - memMetrics = ig.dataRegionMetrics("no-persistence"); + memMetrics = ig.dataRegionMetrics(NO_PERSISTENCE_1); assertNotNull(memMetrics); assertTrue(memMetrics.getTotalAllocatedPages() > 0); @@ -510,35 +519,61 @@ public void testWalTotalSizeWithArchiveTurnedOff() throws Exception { checkWalArchiveAndTotalSize(n, false); } - /** Verifies that the 'EvictionsStarted' metric becomes {@code true} after page eviction is triggered. */ + /** + * Verifies that the 'EvictionsStarted' metric is tracked per data region and becomes {@code true} only for the + * region where page eviction is triggered, remaining unaffected by evictions in other regions. If eviction starts + * in multiple regions, the metric becomes {@code true} independently for each of them. + */ @Test - public void testEvicstionsStartedMetric() throws Exception { + public void testEvictionsStartedMetric() throws Exception { IgniteEx ignite = startGrid(0); ignite.cluster().state(ClusterState.ACTIVE); - String msg = "Page-based evictions started. Consider increasing 'maxSize' on Data Region configuration"; + String template = "Page-based evictions started. Consider increasing 'maxSize' on Data Region configuration: "; - LogListener lsnr = LogListener.matches(msg).build(); + LogListener lsnr = LogListener.matches(template + NO_PERSISTENCE_1).build(); listeningLog.registerListener(lsnr); - IgniteCache cacheNp = ignite.cache("cache-np"); + DataRegionMetrics memMetrics1 = ignite.dataRegionMetrics(NO_PERSISTENCE_1); + DataRegionMetrics memMetrics2 = ignite.dataRegionMetrics(NO_PERSISTENCE_2); + + assertNotNull(memMetrics1); + assertNotNull(memMetrics2); + + assertFalse(memMetrics1.isEvictionsStarted()); + assertFalse(memMetrics2.isEvictionsStarted()); + + IgniteCache cacheNp1 = ignite.cache("cache-np"); + IgniteCache cacheNp2 = ignite.cache("cache-np2"); String big = repeat('X', 256 * 1024); - for (int i = 0; i < 1_000_000 && !lsnr.check(); i++) - cacheNp.put(i, new Person("first-" + i + "-" + big, "last-" + i + "-" + big)); + int entryCnt = 0; + + for (int i = 0; i < 1_000_000 && !lsnr.check(); i++) { + cacheNp1.put(i, new Person("first-" + i + "-" + big, "last-" + i + "-" + big)); + + entryCnt++; + } assertTrue(lsnr.check()); - MetricRegistry metrics = ignite.context().metric().registry(DATASTORAGE_METRIC_PREFIX); - assertNotNull(metrics); + memMetrics1 = ignite.dataRegionMetrics(NO_PERSISTENCE_1); + memMetrics2 = ignite.dataRegionMetrics(NO_PERSISTENCE_2); + + assertTrue(memMetrics1.isEvictionsStarted()); + assertFalse(memMetrics2.isEvictionsStarted()); + + for (int i = 0; i < entryCnt + 10; i++) + cacheNp2.put(i, new Person("first-" + i + "-" + big, "last-" + i + "-" + big)); - BooleanGauge evictStarted = metrics.findMetric("EvictionsStarted"); - assertNotNull(evictStarted); + memMetrics1 = ignite.dataRegionMetrics(NO_PERSISTENCE_1); + memMetrics2 = ignite.dataRegionMetrics(NO_PERSISTENCE_2); - assertTrue(evictStarted.value()); + assertTrue(memMetrics1.isEvictionsStarted()); + assertTrue(memMetrics2.isEvictionsStarted()); } /**