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 96fb4e8f32 Bugfix: Use metric obj for key of LongContainer to fix
split bug (#12664)
96fb4e8f32 is described below
commit 96fb4e8f3215dbe335a97063c6797be8a1548a30
Author: wxbty <[email protected]>
AuthorDate: Wed Jul 5 14:42:14 2023 +0800
Bugfix: Use metric obj for key of LongContainer to fix split bug (#12664)
* Use metric obj for key of LongContainer to fix split bug
* fix testcase
* fix
* add hashcode&equals for ApplicationMetric
* remove unuse
* remove import
---
.../apache/dubbo/metrics/data/MethodStatComposite.java | 4 ----
.../org/apache/dubbo/metrics/data/RtStatComposite.java | 18 +++++++++++-------
.../apache/dubbo/metrics/model/ApplicationMetric.java | 14 ++++++++++++++
.../org/apache/dubbo/metrics/model/MethodMetric.java | 8 ++++----
.../apache/dubbo/metrics/model/ServiceKeyMetric.java | 16 ++++++++--------
.../dubbo/metrics/model/container/LongContainer.java | 13 +++++++------
.../apache/dubbo/metrics/filter/MetricsFilterTest.java | 2 +-
.../dubbo/metrics/metrics/model/MethodMetricTest.java | 2 +-
.../metrics/metadata/MetadataStatCompositeTest.java | 8 +++++---
.../metrics/collector/RegistryStatCompositeTest.java | 6 ++++--
10 files changed, 55 insertions(+), 36 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 d7d5858a16..bfd08d27a3 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
@@ -17,8 +17,6 @@
package org.apache.dubbo.metrics.data;
-import org.apache.dubbo.common.logger.Logger;
-import org.apache.dubbo.common.logger.LoggerFactory;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.metrics.exception.MetricsNeverHappenException;
import org.apache.dubbo.metrics.model.MethodMetric;
@@ -44,8 +42,6 @@ import java.util.concurrent.atomic.AtomicLong;
*/
public class MethodStatComposite extends AbstractMetricsExport {
- private static final Logger logger =
LoggerFactory.getLogger(MethodStatComposite.class);
-
public MethodStatComposite(ApplicationModel applicationModel) {
super(applicationModel);
}
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 c440a35b77..0a739c7d0f 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
@@ -18,7 +18,11 @@
package org.apache.dubbo.metrics.data;
import org.apache.dubbo.common.utils.ConcurrentHashMapUtils;
+import org.apache.dubbo.metrics.model.ApplicationMetric;
+import org.apache.dubbo.metrics.model.MethodMetric;
+import org.apache.dubbo.metrics.model.Metric;
import org.apache.dubbo.metrics.model.MetricsCategory;
+import org.apache.dubbo.metrics.model.ServiceKeyMetric;
import org.apache.dubbo.metrics.model.container.AtomicLongContainer;
import org.apache.dubbo.metrics.model.container.LongAccumulatorContainer;
import org.apache.dubbo.metrics.model.container.LongContainer;
@@ -30,12 +34,10 @@ import org.apache.dubbo.metrics.model.sample.MetricSample;
import org.apache.dubbo.metrics.report.AbstractMetricsExport;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.model.ApplicationModel;
-import org.apache.dubbo.rpc.support.RpcUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAccumulator;
import java.util.stream.Collectors;
@@ -81,21 +83,21 @@ public class RtStatComposite extends AbstractMetricsExport {
public void calcApplicationRt(String registryOpType, Long responseTime) {
for (LongContainer container : rtStats.stream().filter(longContainer
-> longContainer.specifyType(registryOpType)).collect(Collectors.toList())) {
- Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container, getAppName(),
container.getInitFunc());
+ Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container, new
ApplicationMetric(getApplicationModel()), container.getInitFunc());
container.getConsumerFunc().accept(responseTime, current);
}
}
public void calcServiceKeyRt(String serviceKey, String registryOpType,
Long responseTime) {
for (LongContainer container : rtStats.stream().filter(longContainer
-> longContainer.specifyType(registryOpType)).collect(Collectors.toList())) {
- Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container, serviceKey,
container.getInitFunc());
+ Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container, new
ServiceKeyMetric(getApplicationModel(), serviceKey), container.getInitFunc());
container.getConsumerFunc().accept(responseTime, current);
}
}
public void calcMethodKeyRt(Invocation invocation, String registryOpType,
Long responseTime) {
for (LongContainer container : rtStats.stream().filter(longContainer
-> longContainer.specifyType(registryOpType)).collect(Collectors.toList())) {
- Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container,
invocation.getTargetServiceUniqueName() + "_" +
RpcUtils.getMethodName(invocation), container.getInitFunc());
+ Number current = (Number)
ConcurrentHashMapUtils.computeIfAbsent(container, new
MethodMetric(getApplicationModel(), invocation), container.getInitFunc());
container.getConsumerFunc().accept(responseTime, current);
}
}
@@ -104,8 +106,9 @@ public class RtStatComposite extends AbstractMetricsExport {
List<MetricSample> list = new ArrayList<>();
for (LongContainer<? extends Number> rtContainer : rtStats) {
MetricsKeyWrapper metricsKeyWrapper =
rtContainer.getMetricsKeyWrapper();
- for (Map.Entry<String, ? extends Number> entry :
rtContainer.entrySet()) {
- list.add(new
GaugeMetricSample<>(metricsKeyWrapper.targetKey(),
metricsKeyWrapper.targetDesc(),
metricsKeyWrapper.tagName(getApplicationModel(), entry.getKey()), category,
entry.getKey().intern(), value ->
rtContainer.getValueSupplier().apply(value.intern())));
+ for (Metric key : rtContainer.keySet()) {
+ // Use keySet to obtain the original key instance reference of
ConcurrentHashMap to avoid early recycling of the micrometer
+ list.add(new
GaugeMetricSample<>(metricsKeyWrapper.targetKey(),
metricsKeyWrapper.targetDesc(), key.getTags(), category, key, value ->
rtContainer.getValueSupplier().apply(value)));
}
}
return list;
@@ -115,4 +118,5 @@ public class RtStatComposite extends AbstractMetricsExport {
return rtStats;
}
+
}
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ApplicationMetric.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ApplicationMetric.java
index 3a7cc9da7f..4b7d0a8cc5 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ApplicationMetric.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ApplicationMetric.java
@@ -23,6 +23,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import static
org.apache.dubbo.common.constants.MetricsConstants.TAG_APPLICATION_NAME;
import static
org.apache.dubbo.common.constants.MetricsConstants.TAG_APPLICATION_VERSION_KEY;
@@ -62,4 +63,17 @@ public class ApplicationMetric implements Metric {
tags.put(MetricsKey.METADATA_GIT_COMMITID_METRIC.getName(), commitId);
return tags;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ApplicationMetric)) return false;
+ ApplicationMetric that = (ApplicationMetric) o;
+ return Objects.equals(getApplicationName(),
that.applicationModel.getApplicationName());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(getApplicationName());
+ }
}
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/MethodMetric.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/MethodMetric.java
index d3f47a7d8a..86195f6e8e 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/MethodMetric.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/MethodMetric.java
@@ -69,7 +69,7 @@ public class MethodMetric extends ServiceKeyMetric {
}
public Map<String, String> getTags() {
- Map<String, String> tags =
MetricsSupport.methodTags(getApplicationModel(), getInterfaceName(),
methodName);
+ Map<String, String> tags =
MetricsSupport.methodTags(getApplicationModel(), getServiceKey(), methodName);
tags.put(TAG_GROUP_KEY, group);
tags.put(TAG_VERSION_KEY, version);
return tags;
@@ -92,7 +92,7 @@ public class MethodMetric extends ServiceKeyMetric {
return "MethodMetric{" +
"applicationName='" + getApplicationName() + '\'' +
", side='" + side + '\'' +
- ", interfaceName='" + getInterfaceName() + '\'' +
+ ", interfaceName='" + getServiceKey() + '\'' +
", methodName='" + methodName + '\'' +
", group='" + group + '\'' +
", version='" + version + '\'' +
@@ -104,11 +104,11 @@ public class MethodMetric extends ServiceKeyMetric {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MethodMetric that = (MethodMetric) o;
- return Objects.equals(getApplicationName(), that.getApplicationName())
&& Objects.equals(side, that.side) && Objects.equals(getInterfaceName(),
that.getInterfaceName()) && Objects.equals(methodName, that.methodName) &&
Objects.equals(group, that.group) && Objects.equals(version, that.version);
+ return Objects.equals(getApplicationName(), that.getApplicationName())
&& Objects.equals(side, that.side) && Objects.equals(getServiceKey(),
that.getServiceKey()) && Objects.equals(methodName, that.methodName) &&
Objects.equals(group, that.group) && Objects.equals(version, that.version);
}
@Override
public int hashCode() {
- return Objects.hash(getApplicationName(), side, getInterfaceName(),
methodName, group, version);
+ return Objects.hash(getApplicationName(), side, getServiceKey(),
methodName, group, version);
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ServiceKeyMetric.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ServiceKeyMetric.java
index b380bdb77f..ae3ff0df24 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ServiceKeyMetric.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/ServiceKeyMetric.java
@@ -25,20 +25,20 @@ import java.util.Map;
* Metric class for service.
*/
public class ServiceKeyMetric extends ApplicationMetric {
- private final String interfaceName;
+ private final String serviceKey;
public ServiceKeyMetric(ApplicationModel applicationModel, String
serviceKey) {
super(applicationModel);
- this.interfaceName = serviceKey;
+ this.serviceKey = serviceKey;
}
@Override
public Map<String, String> getTags() {
- return MetricsSupport.serviceTags(getApplicationModel(),
interfaceName);
+ return MetricsSupport.serviceTags(getApplicationModel(), serviceKey);
}
- public String getInterfaceName() {
- return interfaceName;
+ public String getServiceKey() {
+ return serviceKey;
}
@Override
@@ -55,13 +55,13 @@ public class ServiceKeyMetric extends ApplicationMetric {
if (!getApplicationName().equals(that.getApplicationName())) {
return false;
}
- return interfaceName.equals(that.interfaceName);
+ return serviceKey.equals(that.serviceKey);
}
@Override
public int hashCode() {
int result = getApplicationName().hashCode();
- result = 31 * result + interfaceName.hashCode();
+ result = 31 * result + serviceKey.hashCode();
return result;
}
@@ -69,7 +69,7 @@ public class ServiceKeyMetric extends ApplicationMetric {
public String toString() {
return "ServiceKeyMetric{" +
"applicationName='" + getApplicationName() + '\'' +
- ", serviceKey='" + interfaceName + '\'' +
+ ", serviceKey='" + serviceKey + '\'' +
'}';
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/container/LongContainer.java
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/container/LongContainer.java
index f5dc78e6bd..fd7b10e81f 100644
---
a/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/container/LongContainer.java
+++
b/dubbo-metrics/dubbo-metrics-api/src/main/java/org/apache/dubbo/metrics/model/container/LongContainer.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.metrics.model.container;
+import org.apache.dubbo.metrics.model.Metric;
import org.apache.dubbo.metrics.model.key.MetricsKeyWrapper;
import org.apache.dubbo.metrics.model.key.MetricsKey;
import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
@@ -30,7 +31,7 @@ import java.util.function.Supplier;
* Long type data container
* @param <N>
*/
-public class LongContainer<N extends Number> extends ConcurrentHashMap<String,
N> {
+public class LongContainer<N extends Number> extends ConcurrentHashMap<Metric,
N> {
/**
* Provide the metric type name
@@ -39,7 +40,7 @@ public class LongContainer<N extends Number> extends
ConcurrentHashMap<String, N
/**
* The initial value corresponding to the key is generally 0 of different
data types
*/
- private final transient Function<String, N> initFunc;
+ private final transient Function<Metric, N> initFunc;
/**
* Statistical data calculation function, which can be self-increment,
self-decrement, or more complex avg function
*/
@@ -47,7 +48,7 @@ public class LongContainer<N extends Number> extends
ConcurrentHashMap<String, N
/**
* Data output function required by {@link GaugeMetricSample
GaugeMetricSample}
*/
- private transient Function<String, Long> valueSupplier;
+ private transient Function<Metric, Long> valueSupplier;
public LongContainer(MetricsKeyWrapper metricsKeyWrapper, Supplier<N>
initFunc, BiConsumer<Long, N> consumerFunc) {
@@ -69,7 +70,7 @@ public class LongContainer<N extends Number> extends
ConcurrentHashMap<String, N
return metricsKeyWrapper.isKey(metricsKey, registryOpType);
}
- public Function<String, N> getInitFunc() {
+ public Function<Metric, N> getInitFunc() {
return initFunc;
}
@@ -77,11 +78,11 @@ public class LongContainer<N extends Number> extends
ConcurrentHashMap<String, N
return consumerFunc;
}
- public Function<String, Long> getValueSupplier() {
+ public Function<Metric, Long> getValueSupplier() {
return valueSupplier;
}
- public void setValueSupplier(Function<String, Long> valueSupplier) {
+ public void setValueSupplier(Function<Metric, Long> valueSupplier) {
this.valueSupplier = valueSupplier;
}
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
index 33e19b66a6..358c4872d3 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/filter/MetricsFilterTest.java
@@ -71,7 +71,7 @@ class MetricsFilterTest {
private static final String INTERFACE_NAME =
"org.apache.dubbo.MockInterface";
private static final String METHOD_NAME = "mockMethod";
private static final String GROUP = "mockGroup";
- private static final String VERSION = "1.0.0";
+ private static final String VERSION = "1.0.0_BETA";
private String side;
private AtomicBoolean initApplication = new AtomicBoolean(false);
diff --git
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/model/MethodMetricTest.java
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/model/MethodMetricTest.java
index 2b99346816..38da8bd843 100644
---
a/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/model/MethodMetricTest.java
+++
b/dubbo-metrics/dubbo-metrics-default/src/test/java/org/apache/dubbo/metrics/metrics/model/MethodMetricTest.java
@@ -73,7 +73,7 @@ class MethodMetricTest {
@Test
void test() {
MethodMetric metric = new MethodMetric(applicationModel, invocation);
- Assertions.assertEquals(metric.getInterfaceName(), interfaceName);
+ Assertions.assertEquals(metric.getServiceKey(), interfaceName);
Assertions.assertEquals(metric.getMethodName(), methodName);
Assertions.assertEquals(metric.getGroup(), group);
Assertions.assertEquals(metric.getVersion(), version);
diff --git
a/dubbo-metrics/dubbo-metrics-metadata/src/test/java/org/apache/dubbo/metrics/metadata/MetadataStatCompositeTest.java
b/dubbo-metrics/dubbo-metrics-metadata/src/test/java/org/apache/dubbo/metrics/metadata/MetadataStatCompositeTest.java
index 0a1cd611ff..7e7292b721 100644
---
a/dubbo-metrics/dubbo-metrics-metadata/src/test/java/org/apache/dubbo/metrics/metadata/MetadataStatCompositeTest.java
+++
b/dubbo-metrics/dubbo-metrics-metadata/src/test/java/org/apache/dubbo/metrics/metadata/MetadataStatCompositeTest.java
@@ -22,6 +22,8 @@ import org.apache.dubbo.metrics.data.ApplicationStatComposite;
import org.apache.dubbo.metrics.data.BaseStatComposite;
import org.apache.dubbo.metrics.data.RtStatComposite;
import org.apache.dubbo.metrics.data.ServiceStatComposite;
+import org.apache.dubbo.metrics.model.ApplicationMetric;
+import org.apache.dubbo.metrics.model.Metric;
import org.apache.dubbo.metrics.model.container.LongContainer;
import org.apache.dubbo.metrics.model.key.MetricsKey;
import org.apache.dubbo.rpc.model.ApplicationModel;
@@ -80,7 +82,7 @@ public class MetadataStatCompositeTest {
Assertions.assertEquals(v.get(), new AtomicLong(0L).get())));
statComposite.getRtStatComposite().getRtStats().forEach(rtContainer ->
{
- for (Map.Entry<String, ? extends Number> entry :
rtContainer.entrySet()) {
+ for (Map.Entry<Metric, ? extends Number> entry :
rtContainer.entrySet()) {
Assertions.assertEquals(0L,
rtContainer.getValueSupplier().apply(entry.getKey()));
}
});
@@ -95,9 +97,9 @@ public class MetadataStatCompositeTest {
@Test
void testCalcRt() {
- statComposite.calcApplicationRt( OP_TYPE_SUBSCRIBE.getType(), 10L);
+ statComposite.calcApplicationRt(OP_TYPE_SUBSCRIBE.getType(), 10L);
Assertions.assertTrue(statComposite.getRtStatComposite().getRtStats().stream().anyMatch(longContainer
-> longContainer.specifyType(OP_TYPE_SUBSCRIBE.getType())));
Optional<LongContainer<? extends Number>> subContainer =
statComposite.getRtStatComposite().getRtStats().stream().filter(longContainer
-> longContainer.specifyType(OP_TYPE_SUBSCRIBE.getType())).findFirst();
- subContainer.ifPresent(v -> Assertions.assertEquals(10L,
v.get(applicationModel.getApplicationName()).longValue()));
+ subContainer.ifPresent(v -> Assertions.assertEquals(10L, v.get(new
ApplicationMetric(applicationModel)).longValue()));
}
}
diff --git
a/dubbo-metrics/dubbo-metrics-registry/src/test/java/org/apache/dubbo/metrics/registry/metrics/collector/RegistryStatCompositeTest.java
b/dubbo-metrics/dubbo-metrics-registry/src/test/java/org/apache/dubbo/metrics/registry/metrics/collector/RegistryStatCompositeTest.java
index 193d0403a1..5ce44d04ad 100644
---
a/dubbo-metrics/dubbo-metrics-registry/src/test/java/org/apache/dubbo/metrics/registry/metrics/collector/RegistryStatCompositeTest.java
+++
b/dubbo-metrics/dubbo-metrics-registry/src/test/java/org/apache/dubbo/metrics/registry/metrics/collector/RegistryStatCompositeTest.java
@@ -22,6 +22,8 @@ import org.apache.dubbo.metrics.data.ApplicationStatComposite;
import org.apache.dubbo.metrics.data.BaseStatComposite;
import org.apache.dubbo.metrics.data.RtStatComposite;
import org.apache.dubbo.metrics.data.ServiceStatComposite;
+import org.apache.dubbo.metrics.model.ApplicationMetric;
+import org.apache.dubbo.metrics.model.Metric;
import org.apache.dubbo.metrics.model.MetricsCategory;
import org.apache.dubbo.metrics.model.container.LongContainer;
import org.apache.dubbo.metrics.model.sample.GaugeMetricSample;
@@ -92,7 +94,7 @@ public class RegistryStatCompositeTest {
Assertions.assertEquals(v.get(), new AtomicLong(0L).get())));
statComposite.getRtStatComposite().getRtStats().forEach(rtContainer ->
{
- for (Map.Entry<String, ? extends Number> entry :
rtContainer.entrySet()) {
+ for (Map.Entry<Metric, ? extends Number> entry :
rtContainer.entrySet()) {
Assertions.assertEquals(0L,
rtContainer.getValueSupplier().apply(entry.getKey()));
}
});
@@ -109,7 +111,7 @@ public class RegistryStatCompositeTest {
statComposite.calcApplicationRt(OP_TYPE_NOTIFY.getType(), 10L);
Assertions.assertTrue(statComposite.getRtStatComposite().getRtStats().stream().anyMatch(longContainer
-> longContainer.specifyType(OP_TYPE_NOTIFY.getType())));
Optional<LongContainer<? extends Number>> subContainer =
statComposite.getRtStatComposite().getRtStats().stream().filter(longContainer
-> longContainer.specifyType(OP_TYPE_NOTIFY.getType())).findFirst();
- subContainer.ifPresent(v -> Assertions.assertEquals(10L,
v.get(applicationName).longValue()));
+ subContainer.ifPresent(v -> Assertions.assertEquals(10L, v.get(new
ApplicationMetric(applicationModel)).longValue()));
}
@Test