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