You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2018/06/04 02:03:05 UTC

[incubator-servicecomb-java-chassis] 05/06: [SCB-617] avoid MetricsBootstrap shutdown NPE

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

wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git

commit 22faf9d55744c9485996d2852d7db9815b888048
Author: wujimin <wu...@huawei.com>
AuthorDate: Mon May 28 16:30:40 2018 +0800

    [SCB-617] avoid MetricsBootstrap shutdown NPE
---
 .../foundation/metrics/MetricsBootstrap.java         |  6 ++++--
 .../foundation/metrics/MetricsInitializer.java       |  2 +-
 .../foundation/metrics/TestMetricsBootstrap.java     | 20 ++++++++++++++------
 .../metrics/core/DefaultRegistryInitializer.java     |  2 +-
 .../metrics/core/TestDefaultRegistryInitializer.java |  2 +-
 .../metrics/prometheus/PrometheusPublisher.java      |  2 +-
 .../metrics/prometheus/TestPrometheusPublisher.java  |  2 +-
 7 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
index 1a6c0d1..7f13bf1 100644
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
+++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsBootstrap.java
@@ -54,12 +54,14 @@ public class MetricsBootstrap {
   }
 
   public void shutdown() {
-    executorService.shutdown();
+    if (executorService != null) {
+      executorService.shutdown();
+    }
 
     List<MetricsInitializer> initializers = new ArrayList<>(SPIServiceUtils.getSortedService(MetricsInitializer.class));
     Collections.reverse(initializers);
     initializers.forEach(initializer -> {
-      initializer.uninit();
+      initializer.destroy();
     });
   }
 
diff --git a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java
index 04f9bd4..b232f48 100644
--- a/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java
+++ b/foundations/foundation-metrics/src/main/java/org/apache/servicecomb/foundation/metrics/MetricsInitializer.java
@@ -29,7 +29,7 @@ public interface MetricsInitializer {
    */
   void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config);
 
-  default void uninit() {
+  default void destroy() {
 
   }
 }
diff --git a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java
index b73834b..50cb30c 100644
--- a/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java
+++ b/foundations/foundation-metrics/src/test/java/org/apache/servicecomb/foundation/metrics/TestMetricsBootstrap.java
@@ -102,7 +102,7 @@ public class TestMetricsBootstrap {
 
   @Test
   public void shutdown(@Mocked ScheduledExecutorService scheduledExecutorService) {
-    List<MetricsInitializer> uninitList = new ArrayList<>();
+    List<MetricsInitializer> destroyList = new ArrayList<>();
     MetricsInitializer initializer1 = new MetricsInitializer() {
       @Override
       public int getOrder() {
@@ -114,8 +114,8 @@ public class TestMetricsBootstrap {
       }
 
       @Override
-      public void uninit() {
-        uninitList.add(this);
+      public void destroy() {
+        destroyList.add(this);
       }
     };
 
@@ -130,8 +130,8 @@ public class TestMetricsBootstrap {
       }
 
       @Override
-      public void uninit() {
-        uninitList.add(this);
+      public void destroy() {
+        destroyList.add(this);
       }
     };
 
@@ -145,6 +145,14 @@ public class TestMetricsBootstrap {
 
     bootstrap.shutdown();
 
-    Assert.assertThat(uninitList, Matchers.contains(initializer2, initializer1));
+    Assert.assertThat(destroyList, Matchers.contains(initializer2, initializer1));
+  }
+
+  @Test
+  public void shutdown_notStart() {
+    Assert.assertNull(Deencapsulation.getField(bootstrap, "executorService"));
+
+    // should not throw exception
+    bootstrap.shutdown();
   }
 }
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java
index 5e81ee1..6bd8146 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java
@@ -49,7 +49,7 @@ public class DefaultRegistryInitializer implements MetricsInitializer {
   }
 
   @Override
-  public void uninit() {
+  public void destroy() {
     DefaultMonitorRegistry.getInstance().unregister(registry);
     globalRegistry.remove(registry);
   }
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java
index 8692a80..4b2a1c3 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java
@@ -49,7 +49,7 @@ public class TestDefaultRegistryInitializer {
     Assert.assertEquals(1, registries.size());
     Assert.assertEquals(1, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size());
 
-    registryInitializer.uninit();
+    registryInitializer.destroy();
 
     Assert.assertEquals(0, registries.size());
     Assert.assertEquals(0, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size());
diff --git a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
index dd4122c..b1eb9c6 100644
--- a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
+++ b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
@@ -114,7 +114,7 @@ public class PrometheusPublisher extends Collector implements Collector.Describa
   }
 
   @Override
-  public void uninit() {
+  public void destroy() {
     if (httpServer == null) {
       return;
     }
diff --git a/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java b/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
index 1bf0766..c953730 100644
--- a/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
+++ b/metrics/metrics-integration/metrics-prometheus/src/test/java/org/apache/servicecomb/metrics/prometheus/TestPrometheusPublisher.java
@@ -102,6 +102,6 @@ public class TestPrometheusPublisher {
           "count_name{tag1=\"tag1v\",tag2=\"tag2v\",} 1.0\n", IOUtils.toString(is));
     }
 
-    publisher.uninit();
+    publisher.destroy();
   }
 }

-- 
To stop receiving notification emails like this one, please contact
wujimin@apache.org.