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

Reply via email to