You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by zi...@apache.org on 2022/02/07 23:36:53 UTC

[gobblin] branch master updated: Upgraded dropwizard metrics library version from 3.2.3 -> 4.1.2 and added a new wrapper class on dropwizard Timer.Context class to handle the code compatibility as the newer version of this class implements AutoClosable instead of Closable. (#3463)

This is an automated email from the ASF dual-hosted git repository.

zihanli58 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new e5ce4e0  Upgraded dropwizard metrics library version from 3.2.3 -> 4.1.2 and added a new wrapper class on dropwizard Timer.Context class to handle the code compatibility as the newer version of this class implements AutoClosable instead of Closable. (#3463)
e5ce4e0 is described below

commit e5ce4e0ffbf2a575b938860eee2ed457bbaddaa3
Author: Abhishek Nath <an...@linkedin.com>
AuthorDate: Mon Feb 7 15:36:45 2022 -0800

    Upgraded dropwizard metrics library version from 3.2.3 -> 4.1.2 and added a new wrapper class on dropwizard Timer.Context class to handle the code compatibility as the newer version of this class implements AutoClosable instead of Closable. (#3463)
---
 gobblin-metrics-libs/gobblin-metrics/build.gradle  |  1 +
 .../org/apache/gobblin/metrics/GobblinMetrics.java |  2 +-
 .../util/limiter/BatchedPermitsRequester.java      |  3 +-
 .../restli/throttling/LimiterServerResource.java   |  5 +--
 gobblin-runtime/build.gradle                       |  1 +
 .../runtime/services/JMXReportingService.java      |  2 +-
 .../apache/gobblin/util/ClosableTimerContext.java  | 42 ++++++++++++++++++++++
 gradle/scripts/computeVersions.gradle              |  2 +-
 gradle/scripts/dependencyDefinitions.gradle        |  1 +
 9 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/gobblin-metrics-libs/gobblin-metrics/build.gradle b/gobblin-metrics-libs/gobblin-metrics/build.gradle
index 30279c5..0b211f8 100644
--- a/gobblin-metrics-libs/gobblin-metrics/build.gradle
+++ b/gobblin-metrics-libs/gobblin-metrics/build.gradle
@@ -27,6 +27,7 @@ dependencies {
 
   compile externalDependency.guava
   compile externalDependency.metricsCore
+  compile externalDependency.metricsJmx
   compile externalDependency.slf4j
   compile externalDependency.jodaTime
   compile externalDependency.commonsLang3
diff --git a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/GobblinMetrics.java b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/GobblinMetrics.java
index 9441d4f..dfb6e78 100644
--- a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/GobblinMetrics.java
+++ b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/GobblinMetrics.java
@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
 
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.Histogram;
-import com.codahale.metrics.JmxReporter;
+import com.codahale.metrics.jmx.JmxReporter;
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.Timer;
diff --git a/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-client/src/main/java/org/apache/gobblin/util/limiter/BatchedPermitsRequester.java b/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-client/src/main/java/org/apache/gobblin/util/limiter/BatchedPermitsRequester.java
index 338d4a1..42da099 100644
--- a/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-client/src/main/java/org/apache/gobblin/util/limiter/BatchedPermitsRequester.java
+++ b/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-client/src/main/java/org/apache/gobblin/util/limiter/BatchedPermitsRequester.java
@@ -52,6 +52,7 @@ import org.apache.gobblin.metrics.MetricContext;
 import org.apache.gobblin.restli.throttling.PermitAllocation;
 import org.apache.gobblin.restli.throttling.PermitRequest;
 import org.apache.gobblin.restli.throttling.ThrottlingProtocolVersion;
+import org.apache.gobblin.util.ClosableTimerContext;
 import org.apache.gobblin.util.ExecutorsUtils;
 import org.apache.gobblin.util.NoopCloseable;
 import org.apache.gobblin.util.Sleeper;
@@ -243,7 +244,7 @@ class BatchedPermitsRequester {
 
       this.currentCallback = new AllocationCallback(
           BatchedPermitsRequester.this.restRequestTimer == null ? NoopCloseable.INSTANCE :
-              BatchedPermitsRequester.this.restRequestTimer.time(), new Sleeper());
+              new ClosableTimerContext(BatchedPermitsRequester.this.restRequestTimer.time()), new Sleeper());
       this.requestSender.sendRequest(permitRequest, currentCallback);
     } catch (CloneNotSupportedException cnse) {
       // This should never happen.
diff --git a/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-server/src/main/java/org/apache/gobblin/restli/throttling/LimiterServerResource.java b/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-server/src/main/java/org/apache/gobblin/restli/throttling/LimiterServerResource.java
index e7ead1a..b1210a1 100644
--- a/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-server/src/main/java/org/apache/gobblin/restli/throttling/LimiterServerResource.java
+++ b/gobblin-restli/gobblin-throttling-service/gobblin-throttling-service-server/src/main/java/org/apache/gobblin/restli/throttling/LimiterServerResource.java
@@ -45,6 +45,7 @@ import org.apache.gobblin.broker.iface.SharedResourcesBroker;
 import org.apache.gobblin.metrics.MetricContext;
 import org.apache.gobblin.metrics.broker.MetricContextFactory;
 import org.apache.gobblin.metrics.broker.SubTaggedMetricContextKey;
+import org.apache.gobblin.util.ClosableTimerContext;
 import org.apache.gobblin.util.NoopCloseable;
 import org.apache.gobblin.util.Sleeper;
 import org.apache.gobblin.util.limiter.Limiter;
@@ -101,7 +102,7 @@ public class LimiterServerResource extends ComplexKeyResourceAsyncTemplate<Permi
   public void get(
       ComplexResourceKey<PermitRequest, EmptyRecord> key,
       @CallbackParam final Callback<PermitAllocation> callback) {
-    try (Closeable context = this.requestTimer == null ? NoopCloseable.INSTANCE : this.requestTimer.time()) {
+    try (Closeable context = (this.requestTimer == null ? NoopCloseable.INSTANCE : new ClosableTimerContext(this.requestTimer.time()))) {
       long startNanos = System.nanoTime();
 
       PermitRequest request = key.getKey();
@@ -127,7 +128,7 @@ public class LimiterServerResource extends ComplexKeyResourceAsyncTemplate<Permi
             new SharedLimiterKey(request.getResource()));
 
         PermitAllocation allocation;
-        try (Closeable thisContext = limiterTimer.time()) {
+        try (Closeable thisContext = new ClosableTimerContext(limiterTimer.time())) {
           allocation = policy.computePermitAllocation(request);
         }
 
diff --git a/gobblin-runtime/build.gradle b/gobblin-runtime/build.gradle
index 46c1053..254ba7c 100644
--- a/gobblin-runtime/build.gradle
+++ b/gobblin-runtime/build.gradle
@@ -78,6 +78,7 @@ dependencies {
   compile externalDependency.jodaTime
   compile externalDependency.metricsCore
   compile externalDependency.metricsJvm
+  compile externalDependency.metricsJmx
   compile externalDependency.mockito
   compile externalDependency.pegasus.data
   compile externalDependency.quartz
diff --git a/gobblin-runtime/src/main/java/org/apache/gobblin/runtime/services/JMXReportingService.java b/gobblin-runtime/src/main/java/org/apache/gobblin/runtime/services/JMXReportingService.java
index 99d62ae..4614851 100644
--- a/gobblin-runtime/src/main/java/org/apache/gobblin/runtime/services/JMXReportingService.java
+++ b/gobblin-runtime/src/main/java/org/apache/gobblin/runtime/services/JMXReportingService.java
@@ -20,7 +20,7 @@ package org.apache.gobblin.runtime.services;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
-import com.codahale.metrics.JmxReporter;
+import com.codahale.metrics.jmx.JmxReporter;
 import com.codahale.metrics.Metric;
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.MetricSet;
diff --git a/gobblin-utility/src/main/java/org/apache/gobblin/util/ClosableTimerContext.java b/gobblin-utility/src/main/java/org/apache/gobblin/util/ClosableTimerContext.java
new file mode 100644
index 0000000..7710667
--- /dev/null
+++ b/gobblin-utility/src/main/java/org/apache/gobblin/util/ClosableTimerContext.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.gobblin.util;
+
+import com.codahale.metrics.Timer;
+import java.io.Closeable;
+import java.io.IOException;
+
+
+/**
+ * This class is a wrapper on com.codahale.metrics.Timer.Context
+ * and implements Closable. Timer.Context implements AutoCloseable 
+ * (with io.dropwizard.metrics library update from 3.x.y to 4.x.y)
+ * and this wrapper class allows caller to still continue using Closable.
+ */
+public class ClosableTimerContext implements Closeable {
+  private final Timer.Context timerContext;
+
+  public ClosableTimerContext(final Timer.Context timerContext) {
+    this.timerContext = timerContext;
+  }
+  
+  @Override
+  public void close() throws IOException {
+    timerContext.close();
+  }
+}
diff --git a/gradle/scripts/computeVersions.gradle b/gradle/scripts/computeVersions.gradle
index 10fdf25..e542fce 100644
--- a/gradle/scripts/computeVersions.gradle
+++ b/gradle/scripts/computeVersions.gradle
@@ -62,7 +62,7 @@ ext.gradleVersionMajor = Integer.parseInt(gradleVersions[0])
 ext.gradleVersionMinor = Integer.parseInt(gradleVersions[1])
 println "Detected Gradle version major=" + gradleVersionMajor + " minor=" + gradleVersionMinor
 
-ext.dropwizardMetricsVersion = '3.2.3'
+ext.dropwizardMetricsVersion = '4.1.2'
 ext.findBugsVersion = '3.0.0'
 ext.googleVersion = '1.22.0'
 ext.slf4jVersion = '1.7.21'
diff --git a/gradle/scripts/dependencyDefinitions.gradle b/gradle/scripts/dependencyDefinitions.gradle
index 56562e5..e988e6e 100644
--- a/gradle/scripts/dependencyDefinitions.gradle
+++ b/gradle/scripts/dependencyDefinitions.gradle
@@ -110,6 +110,7 @@ ext.externalDependency = [
     "metricsCore": "io.dropwizard.metrics:metrics-core:" + dropwizardMetricsVersion,
     "metricsJvm": "io.dropwizard.metrics:metrics-jvm:" + dropwizardMetricsVersion,
     "metricsGraphite": "io.dropwizard.metrics:metrics-graphite:" + dropwizardMetricsVersion,
+    "metricsJmx": "io.dropwizard.metrics:metrics-jmx:" + dropwizardMetricsVersion,
     "jsch": "com.jcraft:jsch:0.1.54",
     "jdo2": "javax.jdo:jdo2-api:2.1",
     "azkaban": "com.linkedin.azkaban:azkaban:2.5.0",