This is an automated email from the ASF dual-hosted git repository.
jnioche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/storm.git
The following commit(s) were added to refs/heads/master by this push:
new 0eaced227 synchronize access to map in Multi*Metric; fixes STORM-3944
new d7851dcac Merge pull request #3559 from DigitalPebble/3944
0eaced227 is described below
commit 0eaced227cda6635bee3d32a9824f8c9cf376092
Author: Julien Nioche <[email protected]>
AuthorDate: Tue Aug 8 11:43:16 2023 +0100
synchronize access to map in Multi*Metric; fixes STORM-3944
Signed-off-by: Julien Nioche <[email protected]>
---
.../apache/storm/metric/api/MultiCountMetric.java | 18 +++++++++-------
.../storm/metric/api/MultiReducedMetric.java | 24 +++++++++++++---------
2 files changed, 25 insertions(+), 17 deletions(-)
diff --git
a/storm-client/src/jvm/org/apache/storm/metric/api/MultiCountMetric.java
b/storm-client/src/jvm/org/apache/storm/metric/api/MultiCountMetric.java
index d1336656a..21d89402e 100644
--- a/storm-client/src/jvm/org/apache/storm/metric/api/MultiCountMetric.java
+++ b/storm-client/src/jvm/org/apache/storm/metric/api/MultiCountMetric.java
@@ -16,24 +16,28 @@ import java.util.HashMap;
import java.util.Map;
public class MultiCountMetric implements IMetric {
- Map<String, CountMetric> value = new HashMap<>();
+ final Map<String, CountMetric> value = new HashMap<>();
public MultiCountMetric() {
}
public CountMetric scope(String key) {
- CountMetric val = value.get(key);
- if (val == null) {
- value.put(key, val = new CountMetric());
+ synchronized (value) {
+ CountMetric val = value.get(key);
+ if (val == null) {
+ value.put(key, val = new CountMetric());
+ }
+ return val;
}
- return val;
}
@Override
public Map<String, Object> getValueAndReset() {
Map<String, Object> ret = new HashMap<>();
- for (Map.Entry<String, CountMetric> e : value.entrySet()) {
- ret.put(e.getKey(), e.getValue().getValueAndReset());
+ synchronized (value) {
+ for (Map.Entry<String, CountMetric> e : value.entrySet()) {
+ ret.put(e.getKey(), e.getValue().getValueAndReset());
+ }
}
return ret;
}
diff --git
a/storm-client/src/jvm/org/apache/storm/metric/api/MultiReducedMetric.java
b/storm-client/src/jvm/org/apache/storm/metric/api/MultiReducedMetric.java
index c9c8590d3..9b0efe0a2 100644
--- a/storm-client/src/jvm/org/apache/storm/metric/api/MultiReducedMetric.java
+++ b/storm-client/src/jvm/org/apache/storm/metric/api/MultiReducedMetric.java
@@ -16,28 +16,32 @@ import java.util.HashMap;
import java.util.Map;
public class MultiReducedMetric implements IMetric {
- Map<String, ReducedMetric> value = new HashMap<>();
- IReducer reducer;
+ final Map<String, ReducedMetric> value = new HashMap<>();
+ final IReducer reducer;
public MultiReducedMetric(IReducer reducer) {
this.reducer = reducer;
}
public ReducedMetric scope(String key) {
- ReducedMetric val = value.get(key);
- if (val == null) {
- value.put(key, val = new ReducedMetric(reducer));
+ synchronized (value) {
+ ReducedMetric val = value.get(key);
+ if (val == null) {
+ value.put(key, val = new ReducedMetric(reducer));
+ }
+ return val;
}
- return val;
}
@Override
public Map<String, Object> getValueAndReset() {
Map<String, Object> ret = new HashMap<>();
- for (Map.Entry<String, ReducedMetric> e : value.entrySet()) {
- Object val = e.getValue().getValueAndReset();
- if (val != null) {
- ret.put(e.getKey(), val);
+ synchronized (value) {
+ for (Map.Entry<String, ReducedMetric> e : value.entrySet()) {
+ Object val = e.getValue().getValueAndReset();
+ if (val != null) {
+ ret.put(e.getKey(), val);
+ }
}
}
return ret;