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();