This is an automated email from the ASF dual-hosted git repository. albumenj pushed a commit to branch 3.3 in repository https://gitbox.apache.org/repos/asf/dubbo.git
commit 1848e400a01391d08f66a2f2407c8b8fa78e4bca Merge: 0dab17f11d b2e081e513 Author: Albumen Kevin <[email protected]> AuthorDate: Sun Oct 8 14:46:26 2023 +0800 Merge branch 'apache-3.2' into apache-3.3 # Conflicts: # dubbo-dependencies-bom/pom.xml # dubbo-dependencies/dubbo-dependencies-zookeeper-curator5/pom.xml # dubbo-dependencies/dubbo-dependencies-zookeeper/pom.xml # dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/BaseStatComposite.java # dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java # dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java # dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadRejectMetricsCountSampler.java # pom.xml dubbo-dependencies-bom/pom.xml | 18 ++---- .../dubbo/metrics/collector/MetricsCollector.java | 8 +++ .../metrics/data/ApplicationStatComposite.java | 14 ++++- .../dubbo/metrics/data/BaseStatComposite.java | 10 ++++ .../dubbo/metrics/data/MethodStatComposite.java | 17 +++++- .../apache/dubbo/metrics/data/RtStatComposite.java | 18 +++++- .../dubbo/metrics/data/ServiceStatComposite.java | 29 ++++++++- .../apache/dubbo/metrics/report/MetricsExport.java | 7 +++ .../dubbo/metrics/report/MetricsReporter.java | 4 +- .../collector/ConfigCenterMetricsCollector.java | 15 ++++- .../collector/AggregateMetricsCollector.java | 66 +++++++++++++++------ .../metrics/collector/DefaultMetricsCollector.java | 20 +++++++ .../collector/HistogramMetricsCollector.java | 9 ++- .../metrics/collector/sample/MetricsSampler.java | 9 +++ .../collector/sample/ThreadPoolMetricsSampler.java | 17 ++++-- .../sample/ThreadRejectMetricsCountSampler.java | 13 ++++- .../metrics/report/AbstractMetricsReporter.java | 68 ++++++++++++++-------- .../report/AbstractMetricsReporterFactory.java | 36 ------------ .../metrics/report/nop/NopMetricsReporter.java | 2 +- .../collector/MetadataMetricsCollector.java | 4 ++ .../prometheus/NopPrometheusMetricsReporter.java | 2 +- .../prometheus/PrometheusMetricsReporter.java | 11 ++-- .../prometheus/PrometheusMetricsReporterCmd.java | 2 +- .../prometheus/PrometheusMetricsReporterTest.java | 7 ++- .../PrometheusMetricsThreadPoolTest.java | 5 +- .../collector/RegistryMetricsCollector.java | 7 +++ .../registry/collector/RegistryStatComposite.java | 22 ++++++- .../command/impl/DefaultMetricsReporterCmd.java | 2 +- .../AuthenticationExceptionTranslatorFilter.java | 6 +- .../ContextHolderAuthenticationPrepareFilter.java | 13 ++++- .../ContextHolderAuthenticationResolverFilter.java | 10 +++- .../model/SecurityScopeModelInitializer.java | 23 ++++++-- .../dubbo/spring/security/utils/SecurityNames.java | 2 + .../multiple/MultipleRegistry2S2RTest.java | 6 +- dubbo-registry/dubbo-registry-zookeeper/pom.xml | 18 +----- 35 files changed, 361 insertions(+), 159 deletions(-) diff --cc dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/BaseStatComposite.java index 3812a85396,f3fcd2d997..810bb21f95 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/BaseStatComposite.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/BaseStatComposite.java @@@ -134,7 -134,13 +134,17 @@@ public abstract class BaseStatComposit return rtStatComposite; } + public void setAppKey(MetricsKey metricsKey, Long num) { + applicationStatComposite.setAppKey(metricsKey, num); + } ++ + @Override + public boolean calSamplesChanged() { + // Should ensure that all the composite's samplesChanged have been compareAndSet, and cannot flip the `or` logic + boolean changed = applicationStatComposite.calSamplesChanged(); + changed = rtStatComposite.calSamplesChanged() || changed; + changed = serviceStatComposite.calSamplesChanged() || changed; + changed = methodStatComposite.calSamplesChanged() || changed; + return changed; + } } diff --cc dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java index 7f2d502a86,f1fd60d91a..aa13de381f --- a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java +++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/DefaultMetricsCollector.java @@@ -95,9 -90,9 +96,10 @@@ public class DefaultMetricsCollector ex } }); super.setEventMulticaster(new DefaultSubDispatcher(this)); - samplers.add(applicationSampler); - samplers.add(threadPoolSampler); - samplesChanged.set(true); + this.samplers.add(applicationSampler); + this.samplers.add(threadPoolSampler); ++ this.samplesChanged.set(true); + this.errorCodeSampler = new ErrorCodeSampler(this); this.applicationModel = applicationModel; } diff --cc dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadPoolMetricsSampler.java index 9b6c9b4710,9ccb55f8db..c206010e38 --- 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 @@@ -130,29 -127,23 +132,34 @@@ public class ThreadPoolMetricsSampler i this.addExecutors(CLIENT_THREAD_POOL_NAME + "-" + entry.getKey(), executor); } } + } + } - ThreadRejectMetricsCountSampler threadRejectMetricsCountSampler = new ThreadRejectMetricsCountSampler(collector); - this.sampleThreadPoolExecutor.entrySet().stream().filter(entry -> entry.getKey().startsWith(SERVER_THREAD_POOL_NAME)).forEach(entry -> { - if (entry.getValue().getRejectedExecutionHandler() instanceof AbortPolicyWithReport) { - MetricThreadPoolExhaustedListener metricThreadPoolExhaustedListener = new MetricThreadPoolExhaustedListener(entry.getKey(), threadRejectMetricsCountSampler); - ((AbortPolicyWithReport) entry.getValue().getRejectedExecutionHandler()).addThreadPoolExhaustedEventListener(metricThreadPoolExhaustedListener); - } - }); + private void addFrameworkExecutors() { + try { + if (this.frameworkExecutorRepository == null) { + this.frameworkExecutorRepository = collector.getApplicationModel().getBeanFactory() + .getBean(FrameworkExecutorRepository.class); + } + } catch (Exception ex) { + logger.warn(COMMON_METRICS_COLLECTOR_EXCEPTION, "", "", "ThreadPoolMetricsSampler! frameworkExecutorRepository non-init"); } - if (this.frameworkExecutorRepository != null) { - this.addExecutors("sharedExecutor", frameworkExecutorRepository.getSharedExecutor()); + if (this.frameworkExecutorRepository == null) { + return; } + this.addExecutors("poolRouterExecutor", frameworkExecutorRepository.getPoolRouterExecutor()); + this.addExecutors("metadataRetryExecutor", frameworkExecutorRepository.getMetadataRetryExecutor()); + this.addExecutors("internalServiceExecutor", frameworkExecutorRepository.getInternalServiceExecutor()); + this.addExecutors("connectivityScheduledExecutor", frameworkExecutorRepository.getConnectivityScheduledExecutor()); + this.addExecutors("cacheRefreshingScheduledExecutor", frameworkExecutorRepository.getCacheRefreshingScheduledExecutor()); + this.addExecutors("sharedExecutor", frameworkExecutorRepository.getSharedExecutor()); + this.addExecutors("sharedScheduledExecutor", frameworkExecutorRepository.getSharedScheduledExecutor()); + this.addExecutors("mappingRefreshingExecutor", frameworkExecutorRepository.getMappingRefreshingExecutor()); } - } + @Override + public boolean calSamplesChanged() { + // CAS to get and reset the flag in an atomic operation + return samplesChanged.compareAndSet(true, false); + } + } diff --cc dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadRejectMetricsCountSampler.java index 2638777574,2c0cbcd518..a45b71b858 --- a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadRejectMetricsCountSampler.java +++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/ThreadRejectMetricsCountSampler.java @@@ -23,15 -25,32 +23,20 @@@ import org.apache.dubbo.metrics.model.T import org.apache.dubbo.metrics.model.key.MetricsKey; import org.apache.dubbo.metrics.model.sample.GaugeMetricSample; import org.apache.dubbo.metrics.model.sample.MetricSample; -- + import java.util.ArrayList; + import java.util.List; + import java.util.Set; + import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import java.util.function.ToDoubleFunction; import static org.apache.dubbo.metrics.model.MetricsCategory.THREAD_POOL; -public class ThreadRejectMetricsCountSampler extends SimpleMetricsCountSampler<String, String, ThreadPoolRejectMetric> { - - private final DefaultMetricsCollector collector; +public class ThreadRejectMetricsCountSampler extends MetricsNameCountSampler<String, String, ThreadPoolRejectMetric> { - private final Set<String> metricNames = new ConcurrentHashSet<>(); + private final AtomicBoolean samplesChanged = new AtomicBoolean(true); + public ThreadRejectMetricsCountSampler(DefaultMetricsCollector collector) { - this.collector = collector; - this.collector.addSampler(this); - } - - public void addMetricName(String name){ - this.metricNames.add(name); - this.initMetricsCounter(name,name); - samplesChanged.set(true); + super(collector, THREAD_POOL,MetricsKey.THREAD_POOL_THREAD_REJECT_COUNT); } @Override
