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);