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

Reply via email to