Expose remaining auto resizes free metric Expose the number of times the cache can automatically expand its capacity. Feature: Issue 13940 Change-Id: Id0ca170b1c3e80fbf875fd6d1b8fb76974a72c88
diff --git a/metrics.md b/metrics.md index aeb6679..85e2745 100644 --- a/metrics.md +++ b/metrics.md
@@ -9,4 +9,10 @@ : the amount of free space left in the cache as a percentage. See the [official documentation](https://javadoc.io/static/net.openhft/chronicle-map/3.20.83/net/openhft/chronicle/map/ChronicleMap.html#percentageFreeSpace--) + for more information. + +* cache/chroniclemap/remaining_autoresizes_<cache-name> + : the number of times the cache can automatically expand its capacity. + + See the [official documentation](https://javadoc.io/static/net.openhft/chronicle-map/3.20.83/net/openhft/chronicle/map/ChronicleMap.html#remainingAutoResizes--) for more information. \ No newline at end of file
diff --git a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java index a7a5589..6b95702 100644 --- a/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java +++ b/src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java
@@ -122,6 +122,7 @@ <K, V> void registerCallBackMetrics(String name, ChronicleMap<K, TimedValue<V>> store) { String PERCENTAGE_FREE_SPACE_METRIC = "cache/chroniclemap/percentage_free_space_" + name; + String REMAINING_AUTORESIZES_METRIC = "cache/chroniclemap/remaining_autoresizes_" + name; metricMaker.newCallbackMetric( PERCENTAGE_FREE_SPACE_METRIC, @@ -129,6 +130,14 @@ new Description( String.format("The amount of free space in the %s cache as a percentage", name)), () -> (long) store.percentageFreeSpace()); + + metricMaker.newCallbackMetric( + REMAINING_AUTORESIZES_METRIC, + Integer.class, + new Description( + String.format( + "The number of times the %s cache can automatically expand its capacity", name)), + store::remainingAutoResizes); } }
diff --git a/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java b/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java index e8f8e7d..459e2f2 100644 --- a/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java +++ b/src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java
@@ -370,6 +370,27 @@ () -> (long) getMetric(freeSpaceMetricName).getValue() < 100, Duration.ofSeconds(2)); } + @Test + public void shouldTriggerRemainingAutoResizeMetric() throws Exception { + String cachedValue = UUID.randomUUID().toString(); + String autoResizeMetricName = "cache/chroniclemap/remaining_autoresizes_" + cachedValue; + gerritConfig.setInt("cache", cachedValue, "maxEntries", 2); + gerritConfig.setInt("cache", cachedValue, "avgKeySize", cachedValue.getBytes().length); + gerritConfig.setInt("cache", cachedValue, "avgValueSize", valueSize(cachedValue)); + gerritConfig.save(); + + ChronicleMapCacheImpl<String, String> cache = newCacheWithMetrics(cachedValue); + + assertThat(getMetric(autoResizeMetricName).getValue()).isEqualTo(1); + + cache.put(cachedValue + "1", cachedValue); + cache.put(cachedValue + "2", cachedValue); + cache.put(cachedValue + "3", cachedValue); + + WaitUtil.waitUntil( + () -> (int) getMetric(autoResizeMetricName).getValue() == 0, Duration.ofSeconds(2)); + } + private int valueSize(String value) { final TimedValueMarshaller<String> marshaller = new TimedValueMarshaller<>(StringCacheSerializer.INSTANCE);