You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2018/04/20 05:05:33 UTC

calcite git commit: [CALCITE-2267] Thread-safe generation of AbstractRelNode.id (Zhong Yu)

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 <yu...@alibaba-inc.com>
Authored: Fri Apr 20 10:53:46 2018 +0800
Committer: Julian Hyde <jh...@apache.org>
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);