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());
+ }
+ }
+ }
+ }
}