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

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.2 by this push:
     new 10681947b6 add core thread pool meter (#11693)
10681947b6 is described below

commit 10681947b664890870c661733df8a18c989092be
Author: songxiaosheng <[email protected]>
AuthorDate: Thu Mar 2 07:03:32 2023 +0800

    add core thread pool meter (#11693)
    
    * fix MetericsService resource location bug
    
    * :art:为jvm指标增加dubbo应用名称
    
    * :art: jvm meter add application name label
    
    * fix unit test failure
    
    * :bug: fix metrics filter path
    
    * :bento: :bento: provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * :bento:provider collector to FrameworkModel scope
    
    * resolve pr conflicts
    
    * resolve pr conflicts
    
    * :sparkles:  add application meter and fix pull delay
    
    * :sparkles:  add application meter and fix pull delay
    
    * :sparkles:  add application meter and fix pull delay
    
    * :sparkles:  add application meter and fix pull delay
    
    * :sparkles:  add application meter and fix pull delay
    
    * ✨ add application meter and fix pull delay
    
    * ✨ add application meter and fix pull delay
    
    * :white_check_mark: fix unit test error
    
    * Optimize the data synchronization of dubbo indicators to the third-party 
(spring boot) registry without refreshing data
    
    * :recycle:refact metrics key and meter unit
    
    * The indicator of the application is removed first, and then the switch 
judgment is added for that indicator of the application
    
    * add core thread pool metric
    
    ---------
    
    Co-authored-by: dongdong.yang <[email protected]>
---
 .../collector/sample/ThreadPoolMetricsSampler.java | 25 ++++++++++++++++++++--
 .../dubbo/metrics/filter/MetricsFilterTest.java    | 10 ++++++++-
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
index 7495b5a884..b83e111706 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java
@@ -18,12 +18,15 @@ package org.apache.dubbo.metrics.collector.sample;
 
 import org.apache.dubbo.common.logger.ErrorTypeAwareLogger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.store.DataStore;
 import org.apache.dubbo.common.threadpool.manager.FrameworkExecutorRepository;
 import org.apache.dubbo.metrics.collector.DefaultMetricsCollector;
 import org.apache.dubbo.metrics.model.MetricsKey;
 import org.apache.dubbo.metrics.model.ThreadPoolMetric;
 import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
 import org.apache.dubbo.metrics.model.sample.MetricSample;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,6 +37,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadPoolExecutor;
 
+import static 
org.apache.dubbo.common.constants.CommonConstants.EXECUTOR_SERVICE_COMPONENT_KEY;
+
 import static 
org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_METRICS_COLLECTOR_EXCEPTION;
 import static org.apache.dubbo.metrics.model.MetricsCategory.THREAD_POOL;
 
@@ -43,6 +48,7 @@ public class ThreadPoolMetricsSampler implements 
MetricsSampler {
 
     private final DefaultMetricsCollector collector;
     private FrameworkExecutorRepository frameworkExecutorRepository;
+    private DataStore dataStore;
     private final Map<String, ThreadPoolExecutor> sampleThreadPoolExecutor = 
new ConcurrentHashMap<>();
 
     public ThreadPoolMetricsSampler(DefaultMetricsCollector collector) {
@@ -82,15 +88,30 @@ public class ThreadPoolMetricsSampler implements 
MetricsSampler {
     }
 
     private void registryDefaultSampleThreadPoolExecutor() {
+        ApplicationModel applicationModel = collector.getApplicationModel();
+        if (applicationModel == null) {
+            return;
+        }
         try {
             if (this.frameworkExecutorRepository == null) {
-                this.frameworkExecutorRepository = 
collector.getApplicationModel()
-                    .getFrameworkModel().getBeanFactory()
+                this.frameworkExecutorRepository = 
collector.getApplicationModel().getBeanFactory()
                     .getBean(FrameworkExecutorRepository.class);
             }
         } catch (Exception ex) {
             logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "", "", 
"ThreadPoolMetricsSampler! frameworkExecutorRepository non-init");
         }
+        if (this.dataStore == null) {
+            this.dataStore = 
collector.getApplicationModel().getExtensionLoader(DataStore.class).getDefaultExtension();
+        }
+        if (dataStore != null) {
+            Map<String, Object> executors = 
dataStore.get(EXECUTOR_SERVICE_COMPONENT_KEY);
+            for (Map.Entry<String, Object> entry : executors.entrySet()) {
+                ExecutorService executor = (ExecutorService) entry.getValue();
+                if (executor instanceof ThreadPoolExecutor) {
+                    this.addExecutors(entry.getKey(), executor);
+                }
+            }
+        }
         if (this.frameworkExecutorRepository != null) {
             this.addExecutors("sharedExecutor", 
frameworkExecutorRepository.getSharedExecutor());
             this.addExecutors("mappingRefreshingExecutor", 
frameworkExecutorRepository.getMappingRefreshingExecutor());
diff --git 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index 41b92f1bd9..0dcf43c04b 100644
--- 
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++ 
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -41,6 +41,7 @@ import org.junit.jupiter.api.Test;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -73,6 +74,8 @@ class MetricsFilterTest {
     private static final String VERSION = "1.0.0";
     private String side;
 
+    private AtomicBoolean initApplication = new AtomicBoolean(false);
+
 
     @BeforeEach
     public void setup() {
@@ -87,6 +90,10 @@ class MetricsFilterTest {
         filter = new MetricsFilter();
 
         collector = 
applicationModel.getBeanFactory().getOrRegisterBean(DefaultMetricsCollector.class);
+        if(!initApplication.get()) {
+            collector.collectApplication(applicationModel);
+            initApplication.set(true);
+        }
         filter.setApplicationModel(applicationModel);
         side = CommonConstants.CONSUMER;
         invocation.setInvoker(new TestMetricsInvoker(side));
@@ -107,6 +114,7 @@ class MetricsFilterTest {
 
         filter.invoke(invoker, invocation);
         Map<String, MetricSample> metricsMap = getMetricsMap();
+        metricsMap.remove(MetricsKey.APPLICATION_METRIC_INFO.getName());
         Assertions.assertTrue(metricsMap.isEmpty());
     }
 
@@ -277,7 +285,7 @@ class MetricsFilterTest {
     }
 
     private void testClusterFilterError(int errorCode,MetricsKey metricsKey){
-        setup();
+//        setup();
         collector.setCollectEnabled(true);
         given(invoker.invoke(invocation)).willThrow(new 
RpcException(errorCode));
         initParam();

Reply via email to