|
@@ -35,6 +35,7 @@ import org.elasticsearch.env.NodeEnvironment;
|
|
|
import org.elasticsearch.env.TestEnvironment;
|
|
|
import org.elasticsearch.node.NodeRoleSettings;
|
|
|
import org.elasticsearch.telemetry.InstrumentType;
|
|
|
+import org.elasticsearch.telemetry.Measurement;
|
|
|
import org.elasticsearch.telemetry.RecordingMeterRegistry;
|
|
|
import org.elasticsearch.test.ESTestCase;
|
|
|
import org.elasticsearch.threadpool.TestThreadPool;
|
|
@@ -332,6 +333,8 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
}
|
|
|
|
|
|
public void testDecay() throws IOException {
|
|
|
+ RecordingMeterRegistry recordingMeterRegistry = new RecordingMeterRegistry();
|
|
|
+ BlobCacheMetrics metrics = new BlobCacheMetrics(recordingMeterRegistry);
|
|
|
// we have 8 regions
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
@@ -347,7 +350,7 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
settings,
|
|
|
taskQueue.getThreadPool(),
|
|
|
taskQueue.getThreadPool().executor(ThreadPool.Names.GENERIC),
|
|
|
- BlobCacheMetrics.NOOP
|
|
|
+ metrics
|
|
|
)
|
|
|
) {
|
|
|
assertEquals(4, cacheService.freeRegionCount());
|
|
@@ -375,6 +378,8 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
assertThat(taskQueue.hasRunnableTasks(), is(true));
|
|
|
taskQueue.runAllRunnableTasks();
|
|
|
assertThat(cacheService.epoch(), equalTo(expectedEpoch.incrementAndGet()));
|
|
|
+ long epochs = recordedEpochs(recordingMeterRegistry);
|
|
|
+ assertEquals(cacheService.epoch(), epochs);
|
|
|
};
|
|
|
|
|
|
triggerDecay.run();
|
|
@@ -435,11 +440,22 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static long recordedEpochs(RecordingMeterRegistry recordingMeterRegistry) {
|
|
|
+ long epochs = recordingMeterRegistry.getRecorder()
|
|
|
+ .getMeasurements(InstrumentType.LONG_COUNTER, "es.blob_cache.epoch.total")
|
|
|
+ .stream()
|
|
|
+ .mapToLong(Measurement::getLong)
|
|
|
+ .sum();
|
|
|
+ return epochs;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Test when many objects need to decay, in particular useful to measure how long the decay task takes.
|
|
|
* For 1M objects (with no assertions) it took 26ms locally.
|
|
|
*/
|
|
|
public void testMassiveDecay() throws IOException {
|
|
|
+ RecordingMeterRegistry recordingMeterRegistry = new RecordingMeterRegistry();
|
|
|
+ BlobCacheMetrics metrics = new BlobCacheMetrics(recordingMeterRegistry);
|
|
|
int regions = 1024; // to measure decay time, increase to 1024*1024 and disable assertions.
|
|
|
Settings settings = Settings.builder()
|
|
|
.put(NODE_NAME_SETTING.getKey(), "node")
|
|
@@ -455,7 +471,7 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
settings,
|
|
|
taskQueue.getThreadPool(),
|
|
|
taskQueue.getThreadPool().executor(ThreadPool.Names.GENERIC),
|
|
|
- BlobCacheMetrics.NOOP
|
|
|
+ metrics
|
|
|
)
|
|
|
) {
|
|
|
Runnable decay = () -> {
|
|
@@ -496,6 +512,9 @@ public class SharedBlobCacheServiceTests extends ESTestCase {
|
|
|
}
|
|
|
}
|
|
|
assertThat(freqs.get(4), equalTo(regions - maxRounds + 1));
|
|
|
+
|
|
|
+ long epochs = recordedEpochs(recordingMeterRegistry);
|
|
|
+ assertEquals(cacheService.epoch(), epochs);
|
|
|
}
|
|
|
}
|
|
|
|