Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -1247,9 +1247,22 @@ public void ensureFreeSpace(DataRegion memPlc) throws IgniteCheckedException {
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();

Expand Down Expand Up @@ -1587,26 +1600,6 @@ public void lastCheckpointInapplicableForWalRebalance(int grpId) {
// 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.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -532,9 +532,11 @@ public void testEvictionsStartedMetric() throws Exception {

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);
Expand All @@ -550,25 +552,24 @@ public void testEvictionsStartedMetric() throws Exception {

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

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

Expand Down
Loading