TINKERPOP-1686 Made MutableMetrics thread-safe for nested results and counts


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7c5294ba
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7c5294ba
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7c5294ba

Branch: refs/heads/TINKERPOP-1686
Commit: 7c5294badbf37cd45dd375e2dc207be0a0b11243
Parents: 4ebe832
Author: Stephen Mallette <[email protected]>
Authored: Wed Jun 28 07:55:51 2017 -0400
Committer: Stephen Mallette <[email protected]>
Committed: Wed Jun 28 08:31:46 2017 -0400

----------------------------------------------------------------------
 .../gremlin/process/traversal/util/ImmutableMetrics.java     | 8 ++++++--
 .../gremlin/process/traversal/util/MutableMetrics.java       | 5 ++++-
 2 files changed, 10 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7c5294ba/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ImmutableMetrics.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ImmutableMetrics.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ImmutableMetrics.java
index a563bbd..d2b1430 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ImmutableMetrics.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/ImmutableMetrics.java
@@ -23,11 +23,15 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
 /**
+ * A {@link Metrics} implementation that cannot be modified.
+ *
  * @author Bob Briody (http://bobbriody.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class ImmutableMetrics implements Metrics, Serializable {
 
@@ -35,9 +39,9 @@ public class ImmutableMetrics implements Metrics, 
Serializable {
 
     protected String id;
     protected String name;
-    protected Map<String, AtomicLong> counts = new HashMap<>();
+    protected Map<String, AtomicLong> counts = new ConcurrentHashMap<>();
     protected long durationNs = 0l;
-    protected final Map<String, Object> annotations = new HashMap<>();
+    protected final Map<String, Object> annotations = new 
ConcurrentHashMap<>();
     protected final Map<String, ImmutableMetrics> nested = new 
LinkedHashMap<>();
 
     protected ImmutableMetrics() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7c5294ba/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
index 34fa370..b3ee5f0 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
@@ -27,7 +27,10 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
 /**
+ * A {@link Metrics} implementation that can be modified.
+ *
  * @author Bob Briody (http://bobbriody.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class MutableMetrics extends ImmutableMetrics implements Cloneable {
 
@@ -61,7 +64,7 @@ public class MutableMetrics extends ImmutableMetrics 
implements Cloneable {
         other.getNested().forEach(nested -> this.addNested(new 
MutableMetrics(nested)));
     }
 
-    public void addNested(final MutableMetrics metrics) {
+    public synchronized void addNested(final MutableMetrics metrics) {
         if (finalized) throw new IllegalStateException("Metrics have been 
finalized and cannot be modified");
         this.nested.put(metrics.getId(), metrics);
     }

Reply via email to