Repository: calcite Updated Branches: refs/heads/master d73f24b64 -> f5b041ff4
[CALCITE-2267] Thread-safe generation of AbstractRelNode.id (Zhong Yu) Close apache/calcite#670 Project: http://git-wip-us.apache.org/repos/asf/calcite/repo Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/f5b041ff Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/f5b041ff Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/f5b041ff Branch: refs/heads/master Commit: f5b041ff46710fca7d104385b7f917384e4a7f1a Parents: d73f24b Author: yuzhong <[email protected]> Authored: Fri Apr 20 10:53:46 2018 +0800 Committer: Julian Hyde <[email protected]> Committed: Thu Apr 19 20:29:12 2018 -0700 ---------------------------------------------------------------------- .../main/java/org/apache/calcite/rel/AbstractRelNode.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/calcite/blob/f5b041ff/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java b/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java index 3b6be13..6518067 100644 --- a/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java +++ b/core/src/main/java/org/apache/calcite/rel/AbstractRelNode.java @@ -52,6 +52,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; /** * Base class for every relational expression ({@link RelNode}). @@ -59,11 +60,8 @@ import java.util.Set; public abstract class AbstractRelNode implements RelNode { //~ Static fields/initializers --------------------------------------------- - // TODO jvs 10-Oct-2003: Make this thread safe. Either synchronize, or - // keep this per-VolcanoPlanner. - /** Generator for {@link #id} values. */ - static int nextId = 0; + private static final AtomicInteger NEXT_ID = new AtomicInteger(0); private static final Logger LOGGER = CalciteTrace.getPlannerTracer(); @@ -95,7 +93,7 @@ public abstract class AbstractRelNode implements RelNode { /** * unique id of this object -- for debugging */ - protected int id; + protected final int id; /** * The RelTraitSet that describes the traits of this RelNode. @@ -112,7 +110,7 @@ public abstract class AbstractRelNode implements RelNode { assert cluster != null; this.cluster = cluster; this.traitSet = traitSet; - this.id = nextId++; + this.id = NEXT_ID.getAndIncrement(); this.digest = getRelTypeName() + "#" + id; this.desc = digest; LOGGER.trace("new {}", digest);
