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:48 UTC
[incubator-servicecomb-java-chassis] 03/09: SCB-422 split create
registry and create invocation meters to different initializer
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 8a7cc9f03a4a5379ca22ca16c757db165f3624aa
Author: wujimin <wu...@huawei.com>
AuthorDate: Wed Apr 4 09:05:33 2018 +0800
SCB-422 split create registry and create invocation meters to different initializer
---
.../metrics/core/DefaultRegistryInitializer.java | 64 ++++++++++++++++++++++
...lizer.java => InvocationMetersInitializer.java} | 24 +++-----
...rvicecomb.foundation.metrics.MetricsInitializer | 3 +-
.../core/TestDefaultRegistryInitializer.java | 57 +++++++++++++++++++
...r.java => TestInvocationMetersInitializer.java} | 39 ++++++-------
5 files changed, 150 insertions(+), 37 deletions(-)
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
new file mode 100644
index 0000000..64650de
--- /dev/null
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultRegistryInitializer.java
@@ -0,0 +1,64 @@
+/*
+ * 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.servicecomb.metrics.core;
+
+import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
+
+import com.google.common.eventbus.EventBus;
+import com.netflix.servo.DefaultMonitorRegistry;
+import com.netflix.spectator.api.CompositeRegistry;
+import com.netflix.spectator.api.Registry;
+import com.netflix.spectator.servo.ServoRegistry;
+
+public class DefaultRegistryInitializer implements MetricsInitializer {
+ public static final String METRICS_WINDOW_TIME = "servicecomb.metrics.window_time";
+
+ public static final int DEFAULT_METRICS_WINDOW_TIME = 5000;
+
+ public static final String SERVO_POLLERS = "servo.pollers";
+
+ private CompositeRegistry globalRegistry;
+
+ private ServoRegistry registry;
+
+ // create registry before init meters
+ @Override
+ public int getOrder() {
+ return -10;
+ }
+
+ @Override
+ public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) {
+ this.globalRegistry = globalRegistry;
+
+ System.getProperties().setProperty(SERVO_POLLERS, String.valueOf(config.getMsPollInterval()));
+ registry = new ServoRegistry();
+
+ globalRegistry.add(registry);
+ }
+
+ @Override
+ public void uninit() {
+ DefaultMonitorRegistry.getInstance().unregister(registry);
+ globalRegistry.remove(registry);
+ }
+
+ public Registry getRegistry() {
+ return registry;
+ }
+}
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultMetricsInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java
similarity index 78%
rename from metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultMetricsInitializer.java
rename to metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java
index 12e090e..e040ec2 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/DefaultMetricsInitializer.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/InvocationMetersInitializer.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.metrics.core;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.event.InvocationFinishEvent;
import org.apache.servicecomb.core.event.InvocationStartEvent;
+import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
import org.apache.servicecomb.metrics.core.meter.ConsumerMeters;
@@ -30,35 +31,24 @@ import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.netflix.spectator.api.CompositeRegistry;
import com.netflix.spectator.api.Registry;
-import com.netflix.spectator.servo.ServoRegistry;
-
-public class DefaultMetricsInitializer implements MetricsInitializer {
- public static final String METRICS_WINDOW_TIME = "servicecomb.metrics.window_time";
-
- public static final int DEFAULT_METRICS_WINDOW_TIME = 5000;
-
- private Registry registry;
+public class InvocationMetersInitializer implements MetricsInitializer {
private ConsumerMeters consumerMeters;
private ProducerMeters producerMeters;
@Override
public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) {
- registry = createRegistry(config);
+ DefaultRegistryInitializer defaultRegistryInitializer =
+ SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class);
+ Registry registry = defaultRegistryInitializer.getRegistry();
- this.consumerMeters = new ConsumerMeters(registry);
- this.producerMeters = new ProducerMeters(registry);
+ consumerMeters = new ConsumerMeters(registry);
+ producerMeters = new ProducerMeters(registry);
- globalRegistry.add(registry);
eventBus.register(this);
}
- protected Registry createRegistry(MetricsBootstrapConfig config) {
- System.getProperties().setProperty("servo.pollers", String.valueOf(config.getMsPollInterval()));
- return new ServoRegistry();
- }
-
protected AbstractInvocationMeters findInvocationMeters(Invocation invocation) {
if (invocation.isConsumer()) {
return consumerMeters.getInvocationMeters();
diff --git a/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
index fb6c466..ecd13da 100644
--- a/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
+++ b/metrics/metrics-core/src/main/resources/META-INF/services/org.apache.servicecomb.foundation.metrics.MetricsInitializer
@@ -15,6 +15,7 @@
# limitations under the License.
#
-org.apache.servicecomb.metrics.core.DefaultMetricsInitializer
+org.apache.servicecomb.metrics.core.DefaultRegistryInitializer
+org.apache.servicecomb.metrics.core.InvocationMetersInitializer
org.apache.servicecomb.metrics.core.publish.DefaultLogPublisher
org.apache.servicecomb.metrics.core.publish.MetricsRestPublisher
\ No newline at end of file
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
new file mode 100644
index 0000000..8692a80
--- /dev/null
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultRegistryInitializer.java
@@ -0,0 +1,57 @@
+/*
+ * 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.servicecomb.metrics.core;
+
+import java.util.List;
+
+import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.hamcrest.Matchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.google.common.eventbus.EventBus;
+import com.netflix.servo.DefaultMonitorRegistry;
+import com.netflix.spectator.api.CompositeRegistry;
+import com.netflix.spectator.api.ManualClock;
+import com.netflix.spectator.api.Registry;
+import com.netflix.spectator.api.SpectatorUtils;
+import com.netflix.spectator.servo.ServoRegistry;
+
+import mockit.Deencapsulation;
+
+public class TestDefaultRegistryInitializer {
+ CompositeRegistry globalRegistry = SpectatorUtils.createCompositeRegistry(new ManualClock());
+
+ List<Registry> registries = Deencapsulation.getField(globalRegistry, "registries");
+
+ DefaultRegistryInitializer registryInitializer = new DefaultRegistryInitializer();
+
+ @Test
+ public void init() {
+ registryInitializer.init(globalRegistry, new EventBus(), new MetricsBootstrapConfig());
+
+ Assert.assertEquals(-10, registryInitializer.getOrder());
+ Assert.assertThat(registryInitializer.getRegistry(), Matchers.instanceOf(ServoRegistry.class));
+ Assert.assertEquals(1, registries.size());
+ Assert.assertEquals(1, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size());
+
+ registryInitializer.uninit();
+
+ Assert.assertEquals(0, registries.size());
+ Assert.assertEquals(0, DefaultMonitorRegistry.getInstance().getRegisteredMonitors().size());
+ }
+}
diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultMetricsInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java
similarity index 82%
rename from metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultMetricsInitializer.java
rename to metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java
index 2c48866..e990e9c 100644
--- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestDefaultMetricsInitializer.java
+++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestInvocationMetersInitializer.java
@@ -19,7 +19,8 @@ package org.apache.servicecomb.metrics.core;
import org.apache.servicecomb.core.Const;
import org.apache.servicecomb.core.Invocation;
import org.apache.servicecomb.core.event.InvocationFinishEvent;
-import org.apache.servicecomb.foundation.metrics.MetricsBootstrapConfig;
+import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
+import org.apache.servicecomb.foundation.metrics.MetricsInitializer;
import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementGroupConfig;
import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementTree;
import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst;
@@ -30,40 +31,40 @@ import org.junit.Before;
import org.junit.Test;
import com.google.common.eventbus.EventBus;
-import com.netflix.spectator.api.CompositeRegistry;
import com.netflix.spectator.api.DefaultRegistry;
import com.netflix.spectator.api.ManualClock;
import com.netflix.spectator.api.Registry;
-import com.netflix.spectator.api.SpectatorUtils;
import mockit.Expectations;
import mockit.Mocked;
-public class TestDefaultMetricsInitializer {
+public class TestInvocationMetersInitializer {
EventBus eventBus = new EventBus();
- ManualClock clock = new ManualClock();
+ Registry registry = new DefaultRegistry(new ManualClock());
- CompositeRegistry globalRegistry = SpectatorUtils.createCompositeRegistry(new ManualClock());
-
- DefaultMetricsInitializer metricsInitializer = new DefaultMetricsInitializer() {
- protected Registry createRegistry(MetricsBootstrapConfig config) {
- return new DefaultRegistry(new ManualClock());
- };
- };
-
- MetricsBootstrapConfig config = new MetricsBootstrapConfig();
+ InvocationMetersInitializer invocationMetersInitializer = new InvocationMetersInitializer();
@Mocked
- private Invocation invocation;
+ Invocation invocation;
@Mocked
- private Response response;
+ Response response;
+ @Mocked
+ DefaultRegistryInitializer defaultRegistryInitializer;
@Before
public void setup() {
- metricsInitializer.init(globalRegistry, eventBus, config);
+ new Expectations(SPIServiceUtils.class) {
+ {
+ SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class);
+ result = defaultRegistryInitializer;
+ defaultRegistryInitializer.getRegistry();
+ result = registry;
+ }
+ };
+ invocationMetersInitializer.init(null, eventBus, null);
}
@Test
@@ -91,7 +92,7 @@ public class TestDefaultMetricsInitializer {
eventBus.post(event);
MeasurementTree tree = new MeasurementTree();
- tree.from(globalRegistry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME));
+ tree.from(registry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME));
Assert.assertEquals(
"[Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=count:status=0:transport=rest,0,2.0), "
+ "Measurement(servicecomb.invocation:operation=m.s.o:role=CONSUMER:stage=total:statistic=totalTime:status=0:transport=rest,0,18.0)]",
@@ -125,7 +126,7 @@ public class TestDefaultMetricsInitializer {
eventBus.post(event);
MeasurementTree tree = new MeasurementTree();
- tree.from(globalRegistry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME));
+ tree.from(registry.iterator(), new MeasurementGroupConfig(MeterInvocationConst.INVOCATION_NAME));
Assert.assertEquals(
"[Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=count:status=0:transport=rest,0,2.0), "
+ "Measurement(servicecomb.invocation:operation=m.s.o:role=PRODUCER:stage=execution:statistic=totalTime:status=0:transport=rest,0,14.0), "
--
To stop receiving notification emails like this one, please contact
wujimin@apache.org.