diff --git a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MetricsNameCountSampler.java b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MetricsNameCountSampler.java index ebf7e437ce..6562e0beab 100644 --- a/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MetricsNameCountSampler.java +++ b/dubbo-metrics/dubbo-metrics-default/src/main/java/org/apache/dubbo/metrics/collector/sample/MetricsNameCountSampler.java @@ -27,12 +27,15 @@ 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; public abstract class MetricsNameCountSampler extends SimpleMetricsCountSampler { protected final DefaultMetricsCollector collector; + private final AtomicBoolean samplesChanged = new AtomicBoolean(true); + protected final Set metricNames = new ConcurrentHashSet<>(); protected final MetricsCategory metricsCategory; @@ -48,6 +51,7 @@ public abstract class MetricsNameCountSampler extends Si public void addMetricName(K name) { this.metricNames.add(name); + this.samplesChanged.set(true); } @Override @@ -66,4 +70,9 @@ public abstract class MetricsNameCountSampler extends Si protected abstract MetricSample provideMetricsSample(M metric,AtomicLong count,MetricsKey metricsKey,MetricsCategory metricsCategory); + @Override + public boolean calSamplesChanged() { + // CAS to get and reset the flag in an atomic operation + return samplesChanged.compareAndSet(true, false); + } } 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 c206010e38..8e459d3266 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 @@ -55,6 +55,8 @@ public class ThreadPoolMetricsSampler implements MetricsSampler { private DataStore dataStore; private final Map sampleThreadPoolExecutor = new ConcurrentHashMap<>(); private final ConcurrentHashMap threadPoolMetricMap = new ConcurrentHashMap<>(); + private final AtomicBoolean samplesChanged = new AtomicBoolean(true); + public ThreadPoolMetricsSampler(DefaultMetricsCollector collector) { this.collector = collector; diff --git 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 index a45b71b858..2638777574 100644 --- 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,18 +23,13 @@ import org.apache.dubbo.metrics.model.ThreadPoolRejectMetric; 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 static org.apache.dubbo.metrics.model.MetricsCategory.THREAD_POOL; public class ThreadRejectMetricsCountSampler extends MetricsNameCountSampler { - private final AtomicBoolean samplesChanged = new AtomicBoolean(true); - public ThreadRejectMetricsCountSampler(DefaultMetricsCollector collector) { super(collector, THREAD_POOL,MetricsKey.THREAD_POOL_THREAD_REJECT_COUNT); } @@ -54,10 +49,4 @@ public class ThreadRejectMetricsCountSampler extends MetricsNameCountSampler sampleConfigure) { sampleConfigure.configureMetrics(configure -> new ThreadPoolRejectMetric(collector.getApplicationName(),configure.getSource())); } - - @Override - public boolean calSamplesChanged() { - // CAS to get and reset the flag in an atomic operation - return samplesChanged.compareAndSet(true, false); - } } diff --git a/dubbo-metrics/dubbo-metrics-netty/src/main/java/org/apache/dubbo/metrics/registry/collector/NettyMetricsCollector.java b/dubbo-metrics/dubbo-metrics-netty/src/main/java/org/apache/dubbo/metrics/registry/collector/NettyMetricsCollector.java index e6d871c8db..5c66a3f36b 100644 --- a/dubbo-metrics/dubbo-metrics-netty/src/main/java/org/apache/dubbo/metrics/registry/collector/NettyMetricsCollector.java +++ b/dubbo-metrics/dubbo-metrics-netty/src/main/java/org/apache/dubbo/metrics/registry/collector/NettyMetricsCollector.java @@ -94,4 +94,8 @@ public class NettyMetricsCollector extends CombMetricsCollector { return list; } + @Override + public boolean calSamplesChanged() { + return stats.calSamplesChanged(); + } }