Deregistered metrics on Gremlin Server stop By deregistering it makes it possible to restart Gremlin Server in the same JVM without WARN log output and with metric resets. This is mostly a fix for tests that start/stop gremlin server over and over again in the same JVM. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b853a9a1 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b853a9a1 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b853a9a1 Branch: refs/heads/TINKERPOP-1625 Commit: b853a9a187823aceee21aa7ba2bfb66f95323596 Parents: 42dc0c7 Author: Stephen Mallette <sp...@genoprime.com> Authored: Thu Mar 23 14:15:26 2017 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Mar 23 14:18:17 2017 -0400 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../tinkerpop/gremlin/server/GremlinServer.java | 5 +++ .../gremlin/server/util/MetricManager.java | 34 +++++++++++--------- 3 files changed, 25 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b853a9a1/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index a77991e..8ba4477 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* De-registered metrics on Gremlin Server shutdown. * Added various metrics to the `GremlinGroovyScriptEngine` around script compilation and exposed them in Gremlin Server. * Moved the `caffeine` dependency down to `gremlin-groovy` and out of `gremlin-server`. * Improved script compilation in `GremlinGroovyScriptEngine to use better caching, log long compile times and prevent failed compilations from recompiling on future requests. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b853a9a1/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java ---------------------------------------------------------------------- diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java index ebfc924..49b2f28 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java @@ -317,6 +317,11 @@ public class GremlinServer { // removing them all will silent them up and release the appropriate resources. MetricManager.INSTANCE.removeAllReporters(); + // removing all the metrics should allow Gremlin Server to clean up the metrics instance so that it can be + // started again in the same JVM without those metrics initialized which generates a warning and won't + // reset to start values + MetricManager.INSTANCE.removeAllMetrics(); + logger.info("Gremlin Server - shutdown complete"); serverStopped.complete(null); }, SERVER_THREAD_PREFIX + "stop").start(); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b853a9a1/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java ---------------------------------------------------------------------- diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java index faec502..70957c9 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/MetricManager.java @@ -381,6 +381,10 @@ public enum MetricManager { removeGraphiteReporter(); } + public synchronized void removeAllMetrics() { + getRegistry().removeMatching((s, metric) -> true); + } + public Counter getCounter(final String name) { return getRegistry().counter(name); } @@ -429,49 +433,49 @@ public enum MetricManager { public void registerGremlinScriptEngineMetrics(final GremlinScriptEngine engine, final String... prefix) { if (engine instanceof GremlinGroovyScriptEngine) { final GremlinGroovyScriptEngine gremlinGroovyScriptEngine = (GremlinGroovyScriptEngine) engine; - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "long-run-compilation-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLongRunCompilationCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "estimated-size")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEstimatedSize); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "average-load-penalty")), (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheAverageLoadPenalty); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "eviction-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "eviction-weight")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheEvictionWeight); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "hit-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheHitCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "hit-rate")), (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheHitRate); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-failure-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadFailureCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-failure-rate")), (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheLoadFailureRate); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "load-success-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheLoadSuccessCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "miss-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheMissCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "miss-rate")), (Gauge<Double>) gremlinGroovyScriptEngine::getClassCacheMissRate); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "request-count")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheRequestCount); - MetricManager.INSTANCE.getRegistry().register( + getRegistry().register( MetricRegistry.name(GremlinServer.class, ArrayUtils.add(prefix, "total-load-time")), (Gauge<Long>) gremlinGroovyScriptEngine::getClassCacheTotalLoadTime); }