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/04/08 15:14:47 UTC
[incubator-servicecomb-java-chassis] 02/09: SCB-422 metrics
shutdown when chassis close
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 f1a110eec3e5b26b5a07cd21a26380090794a39f
Author: wujimin <wu...@huawei.com>
AuthorDate: Wed Apr 4 09:05:08 2018 +0800
SCB-422 metrics shutdown when chassis close
---
.../foundation/metrics/MetricsBootstrap.java | 8 +++
.../foundation/metrics/MetricsInitializer.java | 8 +++
.../foundation/metrics/TestMetricsBootstrap.java | 58 +++++++++++++++++++---
.../metrics/core/MetricsBootListener.java | 2 +
4 files changed, 70 insertions(+), 6 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 0c6a523..335d7c5 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
@@ -16,6 +16,8 @@
*/
package org.apache.servicecomb.foundation.metrics;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -52,6 +54,12 @@ public class MetricsBootstrap {
public void shutdown() {
executorService.shutdown();
+
+ List<MetricsInitializer> initializers = new ArrayList<>(SPIServiceUtils.getSortedService(MetricsInitializer.class));
+ Collections.reverse(initializers);
+ initializers.forEach(initializer -> {
+ initializer.uninit();
+ });
}
protected void loadMetricsInitializers() {
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 5e1aaef..3556576 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
@@ -20,8 +20,16 @@ import com.google.common.eventbus.EventBus;
import com.netflix.spectator.api.CompositeRegistry;
public interface MetricsInitializer {
+ default int getOrder() {
+ return 0;
+ }
+
/**
* if create new registry, must add to globalRegistry
*/
void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config);
+
+ default void uninit() {
+
+ }
}
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 b8280f4..a8fd7ec 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
@@ -19,10 +19,10 @@ package org.apache.servicecomb.foundation.metrics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.hamcrest.Matchers;
-import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
@@ -31,6 +31,7 @@ import com.google.common.eventbus.Subscribe;
import com.netflix.spectator.api.CompositeRegistry;
import com.netflix.spectator.api.Meter;
+import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.Mocked;
@@ -42,11 +43,6 @@ public class TestMetricsBootstrap {
EventBus eventBus = new EventBus();
- @After
- public void teardown() {
- bootstrap.shutdown();
- }
-
@Test
public void loadMetricsInitializers() {
List<MetricsInitializer> initList = new ArrayList<>();
@@ -64,6 +60,7 @@ public class TestMetricsBootstrap {
};
bootstrap.start(globalRegistry, eventBus);
+ bootstrap.shutdown();
Assert.assertThat(initList, Matchers.contains(metricsInitializer, metricsInitializer));
}
@@ -89,7 +86,56 @@ public class TestMetricsBootstrap {
});
bootstrap.pollMeters();
+ bootstrap.shutdown();
Assert.assertEquals(meters, result.getMeters());
}
+
+ @Test
+ public void shutdown(@Mocked ScheduledExecutorService scheduledExecutorService) {
+ List<MetricsInitializer> uninitList = new ArrayList<>();
+ MetricsInitializer initializer1 = new MetricsInitializer() {
+ @Override
+ public int getOrder() {
+ return 1;
+ }
+
+ @Override
+ public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) {
+ }
+
+ @Override
+ public void uninit() {
+ uninitList.add(this);
+ }
+ };
+
+ MetricsInitializer initializer2 = new MetricsInitializer() {
+ @Override
+ public int getOrder() {
+ return 2;
+ }
+
+ @Override
+ public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) {
+ }
+
+ @Override
+ public void uninit() {
+ uninitList.add(this);
+ }
+ };
+
+ new Expectations(SPIServiceUtils.class) {
+ {
+ SPIServiceUtils.getSortedService(MetricsInitializer.class);
+ result = Arrays.asList(initializer1, initializer2);
+ }
+ };
+ Deencapsulation.setField(bootstrap, "executorService", scheduledExecutorService);
+
+ bootstrap.shutdown();
+
+ Assert.assertThat(uninitList, Matchers.contains(initializer2, initializer1));
+ }
}
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
index 289c879..51b7bfc 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/MetricsBootListener.java
@@ -48,6 +48,8 @@ public class MetricsBootListener implements BootListener {
case AFTER_REGISTRY:
metricsBootstrap.start(Spectator.globalRegistry(), EventManager.getEventBus());
break;
+ case BEFORE_CLOSE:
+ metricsBootstrap.shutdown();
default:
break;
}
--
To stop receiving notification emails like this one, please contact
wujimin@apache.org.