You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by sr...@apache.org on 2018/08/03 15:41:53 UTC

[2/6] storm git commit: STORM-3167: Copy map before returning in FakeMetricConsumer, since returning a view of the map is unsafe due to concurrent modification

STORM-3167: Copy map before returning in FakeMetricConsumer, since returning a view of the map is unsafe due to concurrent modification


Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/8fb87ed7
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/8fb87ed7
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/8fb87ed7

Branch: refs/heads/master
Commit: 8fb87ed7211cfde104ca1f5a2a3689190414ae2c
Parents: 146beff
Author: Stig Rohde Døssing <sr...@apache.org>
Authored: Wed Aug 1 16:32:46 2018 +0200
Committer: Stig Rohde Døssing <sr...@apache.org>
Committed: Wed Aug 1 16:33:04 2018 +0200

----------------------------------------------------------------------
 .../apache/storm/metric/FakeMetricConsumer.java | 22 ++++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/8fb87ed7/storm-core/test/jvm/org/apache/storm/metric/FakeMetricConsumer.java
----------------------------------------------------------------------
diff --git a/storm-core/test/jvm/org/apache/storm/metric/FakeMetricConsumer.java b/storm-core/test/jvm/org/apache/storm/metric/FakeMetricConsumer.java
index 23b1c8f..3cf53e8 100644
--- a/storm-core/test/jvm/org/apache/storm/metric/FakeMetricConsumer.java
+++ b/storm-core/test/jvm/org/apache/storm/metric/FakeMetricConsumer.java
@@ -25,36 +25,36 @@ import org.apache.storm.task.TopologyContext;
 
 public class FakeMetricConsumer implements IMetricsConsumer {
 
-    public static final Table<String, String, Multimap<Integer, Object>> buffer = HashBasedTable.create();
+    public static final Table<String, String, Multimap<Integer, Object>> BUFFER = HashBasedTable.create();
 
     public static Map<Integer, Collection<Object>> getTaskIdToBuckets(String componentName, String metricName) {
-        synchronized (buffer) {
-            Multimap<Integer, Object> taskIdToBuckets = buffer.get(componentName, metricName);
-            return (null != taskIdToBuckets) ? taskIdToBuckets.asMap() : null;
+        synchronized (BUFFER) {
+            Multimap<Integer, Object> taskIdToBuckets = BUFFER.get(componentName, metricName);
+            return (null != taskIdToBuckets) ? new HashMap<>(taskIdToBuckets.asMap()) : null;
         }
     }
 
     @Override
     public void prepare(Map<String, Object> topoConf, Object registrationArgument, TopologyContext context, IErrorReporter errorReporter) {
-        synchronized (buffer) {
-            buffer.clear();
+        synchronized (BUFFER) {
+            BUFFER.clear();
         }
     }
 
     @Override
     public void handleDataPoints(TaskInfo taskInfo, Collection<DataPoint> dataPoints) {
-        synchronized (buffer) {
+        synchronized (BUFFER) {
             for (DataPoint dp : dataPoints) {
                 for (Map.Entry<String, Object> entry : expandComplexDataPoint(dp).entrySet()) {
                     String metricName = entry.getKey();
-                    Multimap<Integer, Object> taskIdToBucket = buffer.get(taskInfo.srcComponentId, metricName);
+                    Multimap<Integer, Object> taskIdToBucket = BUFFER.get(taskInfo.srcComponentId, metricName);
                     if (null == taskIdToBucket) {
                         taskIdToBucket = ArrayListMultimap.create();
                         taskIdToBucket.put(taskInfo.srcTaskId, entry.getValue());
                     } else {
                         taskIdToBucket.get(taskInfo.srcTaskId).add(entry.getValue());
                     }
-                    buffer.put(taskInfo.srcComponentId, metricName, taskIdToBucket);
+                    BUFFER.put(taskInfo.srcComponentId, metricName, taskIdToBucket);
                 }
             }
         }
@@ -62,8 +62,8 @@ public class FakeMetricConsumer implements IMetricsConsumer {
 
     @Override
     public void cleanup() {
-        synchronized (buffer) {
-            buffer.clear();
+        synchronized (BUFFER) {
+            BUFFER.clear();
         }
     }