This is an automated email from the ASF dual-hosted git repository. liubao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 56a4668eb748d4a78bc620fb88d1d289f2b16c6f Author: wujimin <wuji...@huawei.com> AuthorDate: Thu Nov 22 09:17:27 2018 +0800 [SCB-1034][WIP] threadPool meters switch to new mechanism --- .../metrics/core/ThreadPoolMetersInitializer.java | 9 ++---- .../core/TestThreadPoolMetersInitializer.java | 33 +++++++++------------- .../publish/TestThreadPoolPublishModelFactory.java | 2 ++ 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java index 1637cfb..621fd0f 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/ThreadPoolMetersInitializer.java @@ -27,12 +27,11 @@ import org.apache.servicecomb.core.definition.MicroserviceMeta; import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.core.executor.FixedThreadExecutor; import org.apache.servicecomb.foundation.common.utils.BeanUtils; -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.foundation.metrics.registry.GlobalRegistry; import com.google.common.eventbus.EventBus; -import com.netflix.spectator.api.CompositeRegistry; import com.netflix.spectator.api.Registry; import com.netflix.spectator.api.patterns.ThreadPoolMonitor; @@ -40,10 +39,8 @@ public class ThreadPoolMetersInitializer implements MetricsInitializer { private Registry registry; @Override - public void init(CompositeRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { - DefaultRegistryInitializer defaultRegistryInitializer = - SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class); - registry = defaultRegistryInitializer.getRegistry(); + public void init(GlobalRegistry globalRegistry, EventBus eventBus, MetricsBootstrapConfig config) { + registry = globalRegistry.getDefaultRegistry(); createThreadPoolMeters(); } diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java index 378743d..4942ccf 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/TestThreadPoolMetersInitializer.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import java.util.concurrent.RunnableScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; @@ -33,31 +34,31 @@ import org.apache.servicecomb.core.definition.MicroserviceMeta; import org.apache.servicecomb.core.definition.OperationMeta; import org.apache.servicecomb.core.executor.FixedThreadExecutor; import org.apache.servicecomb.foundation.common.utils.BeanUtils; -import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; -import org.apache.servicecomb.foundation.metrics.MetricsInitializer; +import org.apache.servicecomb.foundation.metrics.registry.GlobalRegistry; import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; +import org.mockito.Mockito; import org.springframework.context.ApplicationContext; import com.netflix.spectator.api.DefaultRegistry; import com.netflix.spectator.api.ManualClock; import com.netflix.spectator.api.Registry; +import com.netflix.spectator.api.patterns.PolledMeter; + import mockit.Expectations; import mockit.Mock; import mockit.MockUp; import mockit.Mocked; public class TestThreadPoolMetersInitializer { + GlobalRegistry globalRegistry = new GlobalRegistry(); + Registry registry = new DefaultRegistry(new ManualClock()); ThreadPoolMetersInitializer threadPoolMetersInitializer = new ThreadPoolMetersInitializer(); - @Mocked - DefaultRegistryInitializer defaultRegistryInitializer; - - @Mocked - ThreadPoolExecutor threadPoolExecutor; + ThreadPoolExecutor threadPoolExecutor = Mockito.mock(ThreadPoolExecutor.class); @Mocked BlockingQueue<Runnable> queue; @@ -65,8 +66,7 @@ public class TestThreadPoolMetersInitializer { @Mocked FixedThreadExecutor fixedThreadExecutor; - @Mocked - Executor executor; + ExecutorService executor = Mockito.mock(ExecutorService.class); @Mocked ApplicationContext applicationContext; @@ -92,14 +92,6 @@ public class TestThreadPoolMetersInitializer { result = microserviceMeta; } }; - new Expectations(SPIServiceUtils.class) { - { - SPIServiceUtils.getTargetService(MetricsInitializer.class, DefaultRegistryInitializer.class); - result = defaultRegistryInitializer; - defaultRegistryInitializer.getRegistry(); - result = registry; - } - }; Map<String, Executor> beanExecutors = new HashMap<>(); beanExecutors.put("executor", executor); beanExecutors.put("fixedThreadExecutor", fixedThreadExecutor); @@ -113,6 +105,7 @@ public class TestThreadPoolMetersInitializer { } }; + Mockito.when(threadPoolExecutor.getQueue()).thenReturn(queue); new Expectations(CseContext.getInstance()) { { microserviceMeta.getOperations(); @@ -127,8 +120,6 @@ public class TestThreadPoolMetersInitializer { fixedThreadExecutor.getExecutorList(); result = Arrays.asList(threadPoolExecutor); - threadPoolExecutor.getQueue(); - result = queue; queue.size(); result = 10d; } @@ -141,8 +132,10 @@ public class TestThreadPoolMetersInitializer { } }; - threadPoolMetersInitializer.init(null, null, null); + globalRegistry.add(registry); + threadPoolMetersInitializer.init(globalRegistry, null, null); + PolledMeter.update(registry); List<String> result = new ArrayList<>(); registry.iterator().forEachRemaining(meter -> { result.add(meter.measure().toString()); diff --git a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java index 7f000f0..ab8c898 100644 --- a/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java +++ b/metrics/metrics-core/src/test/java/org/apache/servicecomb/metrics/core/publish/TestThreadPoolPublishModelFactory.java @@ -32,6 +32,7 @@ import com.google.common.eventbus.EventBus; import com.netflix.spectator.api.DefaultRegistry; import com.netflix.spectator.api.ManualClock; import com.netflix.spectator.api.Registry; +import com.netflix.spectator.api.patterns.PolledMeter; import com.netflix.spectator.api.patterns.ThreadPoolMonitor; import mockit.Expectations; @@ -68,6 +69,7 @@ public class TestThreadPoolPublishModelFactory { }; ThreadPoolMonitor.attach(registry, threadPoolExecutor, "test"); + PolledMeter.update(registry); PublishModelFactory factory = new PublishModelFactory(Lists.newArrayList(registry.iterator())); DefaultPublishModel model = factory.createDefaultPublishModel();