Skip to content

Commit 5208e0f

Browse files
authored
IGNITE-28099 Use CAS for eviction start warning (#12992)
1 parent 15f2122 commit 5208e0f

2 files changed

Lines changed: 8 additions & 24 deletions

File tree

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/DataRegionMetricsImpl.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Collections;
2222
import java.util.List;
2323
import java.util.Optional;
24+
import java.util.concurrent.atomic.AtomicBoolean;
2425
import org.apache.ignite.DataRegionMetrics;
2526
import org.apache.ignite.DataRegionMetricsProvider;
2627
import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -30,7 +31,6 @@
3031
import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMetricsImpl;
3132
import org.apache.ignite.internal.processors.metric.MetricRegistryImpl;
3233
import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
33-
import org.apache.ignite.internal.processors.metric.impl.BooleanMetricImpl;
3434
import org.apache.ignite.internal.processors.metric.impl.HitRateMetric;
3535
import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
3636
import org.apache.ignite.internal.processors.metric.impl.LongAdderWithDelegateMetric;
@@ -180,7 +180,7 @@ private static LongAdderMetricDelegate delegate(LongAdderMetric delegate) {
180180
private final PeriodicHistogramMetricImpl pageTsHistogram;
181181

182182
/** Metric indicating whether page eviction has started. */
183-
private final BooleanMetricImpl evictionsStarted;
183+
private final AtomicBoolean evictionsStarted = new AtomicBoolean();
184184

185185
/**
186186
* Same as {@link #DataRegionMetricsImpl(DataRegionConfiguration, GridKernalContext, DataRegionMetricsProvider)}
@@ -285,7 +285,7 @@ public DataRegionMetricsImpl(
285285
mreg.longMetric("MaxSize", "Maximum memory region size in bytes defined by its data region.")
286286
.value(dataRegionCfg.getMaxSize());
287287

288-
evictionsStarted = mreg.booleanMetric("EvictionsStarted",
288+
mreg.register("EvictionsStarted", evictionsStarted::get,
289289
"True if page eviction was triggered due to data region memory pressure.");
290290

291291
if (persistenceEnabled) {
@@ -885,12 +885,11 @@ public Collection<PagesTimestampHistogramView> pagesTimestampHistogramView() {
885885

886886
/** {@inheritDoc} */
887887
@Override public boolean isEvictionsStarted() {
888-
return evictionsStarted.value();
888+
return evictionsStarted.get();
889889
}
890890

891-
/** */
892-
public void onPageEvictionsStarted() {
893-
if (!evictionsStarted.value())
894-
evictionsStarted.value(true);
891+
/** @return {@code True} if eviction has started for the first time. */
892+
public boolean onPageEvictionsStarted() {
893+
return evictionsStarted.compareAndSet(false, true);
895894
}
896895
}

modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,6 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
167167
/** Data storege metrics. */
168168
protected final DataStorageMetricsImpl dsMetrics;
169169

170-
/** */
171-
private final Object mux = new Object();
172-
173170
/**
174171
* @param ctx Kernal context.
175172
*/
@@ -1247,19 +1244,7 @@ public void ensureFreeSpace(DataRegion memPlc) throws IgniteCheckedException {
12471244
return;
12481245

12491246
while (memPlc.evictionTracker().evictionRequired()) {
1250-
boolean shouldLog = false;
1251-
1252-
if (!memPlc.metrics().isEvictionsStarted()) {
1253-
synchronized (mux) {
1254-
if (!memPlc.metrics().isEvictionsStarted()) {
1255-
memPlc.metrics().onPageEvictionsStarted();
1256-
1257-
shouldLog = true;
1258-
}
1259-
}
1260-
}
1261-
1262-
if (shouldLog) {
1247+
if (memPlc.metrics().onPageEvictionsStarted()) {
12631248
U.warn(log, "Page-based evictions started." +
12641249
" Consider increasing 'maxSize' on Data Region configuration: " + memPlc.config().getName());
12651250
}

0 commit comments

Comments
 (0)