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

namelchev 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 5208e0f276c IGNITE-28099 Use CAS for eviction start warning (#12992)
5208e0f276c is described below

commit 5208e0f276ce6fb5ea4b2aaa7a54882cc7f026e7
Author: Nikita Amelchev <[email protected]>
AuthorDate: Wed Apr 8 10:09:46 2026 +0300

    IGNITE-28099 Use CAS for eviction start warning (#12992)
---
 .../cache/persistence/DataRegionMetricsImpl.java        | 15 +++++++--------
 .../persistence/IgniteCacheDatabaseSharedManager.java   | 17 +----------------
 2 files changed, 8 insertions(+), 24 deletions(-)

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 1e962331f11..101e3da13ca 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
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.ignite.DataRegionMetrics;
 import org.apache.ignite.DataRegionMetricsProvider;
 import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -30,7 +31,6 @@ import 
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMetri
 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;
@@ -180,7 +180,7 @@ public class DataRegionMetricsImpl implements 
DataRegionMetrics {
     private final PeriodicHistogramMetricImpl pageTsHistogram;
 
     /** Metric indicating whether page eviction has started. */
-    private final BooleanMetricImpl evictionsStarted;
+    private final AtomicBoolean evictionsStarted = new AtomicBoolean();
 
     /**
      * Same as {@link #DataRegionMetricsImpl(DataRegionConfiguration, 
GridKernalContext, DataRegionMetricsProvider)}
@@ -285,7 +285,7 @@ public class DataRegionMetricsImpl implements 
DataRegionMetrics {
         mreg.longMetric("MaxSize", "Maximum memory region size in bytes 
defined by its data region.")
             .value(dataRegionCfg.getMaxSize());
 
-        evictionsStarted = mreg.booleanMetric("EvictionsStarted",
+        mreg.register("EvictionsStarted", evictionsStarted::get,
             "True if page eviction was triggered due to data region memory 
pressure.");
 
         if (persistenceEnabled) {
@@ -885,12 +885,11 @@ public class DataRegionMetricsImpl implements 
DataRegionMetrics {
 
     /** {@inheritDoc} */
     @Override public boolean isEvictionsStarted() {
-        return evictionsStarted.value();
+        return evictionsStarted.get();
     }
 
-    /** */
-    public void onPageEvictionsStarted() {
-        if (!evictionsStarted.value())
-            evictionsStarted.value(true);
+    /** @return {@code True} if eviction has started for the first time. */
+    public boolean onPageEvictionsStarted() {
+        return evictionsStarted.compareAndSet(false, true);
     }
 }
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 2143c85d251..b22a6682957 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
@@ -167,9 +167,6 @@ public class IgniteCacheDatabaseSharedManager extends 
GridCacheSharedManagerAdap
     /** Data storege metrics. */
     protected final DataStorageMetricsImpl dsMetrics;
 
-    /** */
-    private final Object mux = new Object();
-
     /**
      * @param ctx Kernal context.
      */
@@ -1247,19 +1244,7 @@ public class IgniteCacheDatabaseSharedManager extends 
GridCacheSharedManagerAdap
             return;
 
         while (memPlc.evictionTracker().evictionRequired()) {
-            boolean shouldLog = false;
-
-            if (!memPlc.metrics().isEvictionsStarted()) {
-                synchronized (mux) {
-                    if (!memPlc.metrics().isEvictionsStarted()) {
-                        memPlc.metrics().onPageEvictionsStarted();
-
-                        shouldLog = true;
-                    }
-                }
-            }
-
-            if (shouldLog) {
+            if (memPlc.metrics().onPageEvictionsStarted()) {
                 U.warn(log, "Page-based evictions started." +
                     " Consider increasing 'maxSize' on Data Region 
configuration: " + memPlc.config().getName());
             }

Reply via email to