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