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 58fa120795 :bug: fix metrics servce level config bug (#13449)
58fa120795 is described below

commit 58fa12079578b7def49fe6c386c1bcce97f2123a
Author: xiaosheng <[email protected]>
AuthorDate: Mon Dec 4 09:34:47 2023 +0800

    :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
---
 .../apache/dubbo/metrics/data/MethodStatComposite.java |  5 ++---
 .../org/apache/dubbo/metrics/data/RtStatComposite.java |  4 +---
 .../dubbo/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<MetricsKeyWrapper, Map<MethodMetric, AtomicLong>> 
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<String, List<LongContainer<? extends Number>>> rtStats = 
new ConcurrentHashMap<>();
@@ -190,7 +188,7 @@ public class RtStatComposite extends AbstractMetricsExport {
         List<Action> 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());
+                }
+            }
+        }
+    }
 }

Reply via email to