This is an automated email from the ASF dual-hosted git repository.

sergeychugunov 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 943088799c7 IGNITE-28099 Fix eviction warning to be logged per data 
region (#12953)
943088799c7 is described below

commit 943088799c7b5e378e609c13219b429fd8953ec0
Author: oleg-vlsk <[email protected]>
AuthorDate: Tue Apr 7 17:01:40 2026 +1000

    IGNITE-28099 Fix eviction warning to be logged per data region (#12953)
---
 .../IgniteCacheDatabaseSharedManager.java          | 43 +++++++++-------------
 .../IgniteDataStorageMetricsSelfTest.java          | 19 +++++-----
 2 files changed, 28 insertions(+), 34 deletions(-)

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 cb63dbedbef..2143c85d251 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
@@ -164,12 +164,12 @@ public class IgniteCacheDatabaseSharedManager extends 
GridCacheSharedManagerAdap
     /** Page size from memory configuration, may be set only for 
fake(standalone) IgniteCacheDataBaseSharedManager */
     private int pageSize;
 
-    /** First eviction was warned flag. */
-    private volatile boolean firstEvictWarn;
-
     /** Data storege metrics. */
     protected final DataStorageMetricsImpl dsMetrics;
 
+    /** */
+    private final Object mux = new Object();
+
     /**
      * @param ctx Kernal context.
      */
@@ -1247,9 +1247,22 @@ public class IgniteCacheDatabaseSharedManager extends 
GridCacheSharedManagerAdap
             return;
 
         while (memPlc.evictionTracker().evictionRequired()) {
-            memPlc.metrics().onPageEvictionsStarted();
+            boolean shouldLog = false;
 
-            warnFirstEvict(memPlc.config());
+            if (!memPlc.metrics().isEvictionsStarted()) {
+                synchronized (mux) {
+                    if (!memPlc.metrics().isEvictionsStarted()) {
+                        memPlc.metrics().onPageEvictionsStarted();
+
+                        shouldLog = true;
+                    }
+                }
+            }
+
+            if (shouldLog) {
+                U.warn(log, "Page-based evictions started." +
+                    " Consider increasing 'maxSize' on Data Region 
configuration: " + memPlc.config().getName());
+            }
 
             memPlc.evictionTracker().evictDataPage();
 
@@ -1587,26 +1600,6 @@ public class IgniteCacheDatabaseSharedManager extends 
GridCacheSharedManagerAdap
         // No-op.
     }
 
-    /**
-     * Warns on first eviction.
-     * @param regCfg data region configuration.
-     */
-    private void warnFirstEvict(DataRegionConfiguration regCfg) {
-        if (firstEvictWarn)
-            return;
-
-        // Do not move warning output to synchronized block (it causes warning 
in IDE).
-        synchronized (this) {
-            if (firstEvictWarn)
-                return;
-
-            firstEvictWarn = true;
-        }
-
-        U.warn(log, "Page-based evictions started." +
-                " Consider increasing 'maxSize' on Data Region configuration: 
" + regCfg.getName());
-    }
-
     /**
      * Checking existence of a warm-up configuration.
      *
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 dffaf8a29a9..977368c4ee6 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
@@ -532,9 +532,11 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
 
         String template = "Page-based evictions started. Consider increasing 
'maxSize' on Data Region configuration: ";
 
-        LogListener lsnr = LogListener.matches(template + 
NO_PERSISTENCE_1).build();
+        LogListener lsnr1 = LogListener.matches(template + 
NO_PERSISTENCE_1).build();
+        LogListener lsnr2 = LogListener.matches(template + 
NO_PERSISTENCE_2).build();
 
-        listeningLog.registerListener(lsnr);
+        listeningLog.registerListener(lsnr1);
+        listeningLog.registerListener(lsnr2);
 
         DataRegionMetrics memMetrics1 = 
ignite.dataRegionMetrics(NO_PERSISTENCE_1);
         DataRegionMetrics memMetrics2 = 
ignite.dataRegionMetrics(NO_PERSISTENCE_2);
@@ -550,15 +552,12 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
 
         String big = repeat('X', 256 * 1024);
 
-        int entryCnt = 0;
+        int entryCntMax = 1_000_000;
 
-        for (int i = 0; i < 1_000_000 && !lsnr.check(); i++) {
+        for (int i = 0; i < entryCntMax && !lsnr1.check(); i++)
             cacheNp1.put(i, new Person("first-" + i + "-" + big, "last-" + i + 
"-" + big));
 
-            entryCnt++;
-        }
-
-        assertTrue(lsnr.check());
+        assertTrue(lsnr1.check());
 
         memMetrics1 = ignite.dataRegionMetrics(NO_PERSISTENCE_1);
         memMetrics2 = ignite.dataRegionMetrics(NO_PERSISTENCE_2);
@@ -566,9 +565,11 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
         assertTrue(memMetrics1.isEvictionsStarted());
         assertFalse(memMetrics2.isEvictionsStarted());
 
-        for (int i = 0; i < entryCnt + 10; i++)
+        for (int i = 0; i < entryCntMax && !lsnr2.check(); i++)
             cacheNp2.put(i, new Person("first-" + i + "-" + big, "last-" + i + 
"-" + big));
 
+        assertTrue(lsnr2.check());
+
         memMetrics1 = ignite.dataRegionMetrics(NO_PERSISTENCE_1);
         memMetrics2 = ignite.dataRegionMetrics(NO_PERSISTENCE_2);
 

Reply via email to