From 58fa12079578b7def49fe6c386c1bcce97f2123a Mon Sep 17 00:00:00 2001 From: xiaosheng Date: Mon, 4 Dec 2023 09:34:47 +0800 Subject: [PATCH] :bug: fix metrics servce level config bug (#13449) * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug * :bug: fix metrics servce level config bug --- .../metrics/data/MethodStatComposite.java | 5 ++--- .../dubbo/metrics/data/RtStatComposite.java | 4 +--- .../metrics/report/AbstractMetricsExport.java | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java index a06751553e..b9717a5b84 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/MethodStatComposite.java @@ -41,13 +41,11 @@ import java.util.concurrent.atomic.AtomicLong; * the key will not be displayed when exporting (to be optimized) */ public class MethodStatComposite extends AbstractMetricsExport { - private boolean serviceLevel; private final AtomicBoolean samplesChanged = new AtomicBoolean(true); public MethodStatComposite(ApplicationModel applicationModel) { super(applicationModel); - this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); } private final Map> methodNumStats = new ConcurrentHashMap<>(); @@ -70,7 +68,8 @@ public class MethodStatComposite extends AbstractMetricsExport { methodNumStats .get(wrapper) .computeIfAbsent( - new MethodMetric(getApplicationModel(), invocation, serviceLevel), k -> new AtomicLong(0L)); + new MethodMetric(getApplicationModel(), invocation, getServiceLevel()), + k -> new AtomicLong(0L)); samplesChanged.set(true); } diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java index 8ac99e1667..0a3001f2ec 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/data/RtStatComposite.java @@ -50,13 +50,11 @@ import java.util.stream.Collectors; */ @SuppressWarnings({"rawtypes", "unchecked"}) public class RtStatComposite extends AbstractMetricsExport { - private boolean serviceLevel; private final AtomicBoolean samplesChanged = new AtomicBoolean(true); public RtStatComposite(ApplicationModel applicationModel) { super(applicationModel); - this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); } private final Map>> rtStats = new ConcurrentHashMap<>(); @@ -190,7 +188,7 @@ public class RtStatComposite extends AbstractMetricsExport { List actions; actions = new LinkedList<>(); for (LongContainer container : rtStats.get(registryOpType)) { - MethodMetric key = new MethodMetric(getApplicationModel(), invocation, serviceLevel); + MethodMetric key = new MethodMetric(getApplicationModel(), invocation, getServiceLevel()); Number current = (Number) container.get(key); if (current == null) { container.putIfAbsent(key, container.getInitFunc().apply(key)); diff --git a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java index 7ea0c64bd8..cb50129f89 100644 --- a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java +++ b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/report/AbstractMetricsExport.java @@ -16,6 +16,7 @@ */ package org.apache.dubbo.metrics.report; +import org.apache.dubbo.metrics.model.MethodMetric; import org.apache.dubbo.rpc.model.ApplicationModel; /** @@ -23,6 +24,8 @@ import org.apache.dubbo.rpc.model.ApplicationModel; */ public abstract class AbstractMetricsExport implements MetricsExport { + private volatile Boolean serviceLevel; + private final ApplicationModel applicationModel; public AbstractMetricsExport(ApplicationModel applicationModel) { @@ -36,4 +39,19 @@ public abstract class AbstractMetricsExport implements MetricsExport { public String getAppName() { return getApplicationModel().getApplicationName(); } + + protected boolean getServiceLevel() { + initServiceLevelConfig(); + return this.serviceLevel; + } + + private void initServiceLevelConfig() { + if (serviceLevel == null) { + synchronized (this) { + if (serviceLevel == null) { + this.serviceLevel = MethodMetric.isServiceLevel(getApplicationModel()); + } + } + } + } }