Repository: hive
Updated Branches:
  refs/heads/branch-1 9e7a35f7a -> 8aab8cf1d


HIVE-11366: Avoid right leaning tree hashCode depth in 
ExprNodeDescEqualityWrapper hashmaps (Gopal V, reviewed by Ashutosh Chauhan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5d65b5f6
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5d65b5f6
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5d65b5f6

Branch: refs/heads/branch-1
Commit: 5d65b5f682d13e180734827eef48def40332f3e8
Parents: 9e7a35f
Author: Gopal V <gop...@apache.org>
Authored: Tue Aug 25 14:14:08 2015 -0700
Committer: Gopal V <gop...@apache.org>
Committed: Tue Aug 25 14:24:49 2015 -0700

----------------------------------------------------------------------
 .../org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/5d65b5f6/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java 
b/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java
index 0fe9eda..15267b9 100755
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDesc.java
@@ -98,21 +98,22 @@ public abstract class ExprNodeDesc implements Serializable, 
Node {
 
   // This wraps an instance of an ExprNodeDesc, and makes equals work like 
isSame, see comment on
   // isSame
-  public static class ExprNodeDescEqualityWrapper {
-    private ExprNodeDesc exprNodeDesc;
+  public final static class ExprNodeDescEqualityWrapper {
+    private final ExprNodeDesc exprNodeDesc;
+    // beware of any implementation whose hashcode is mutable by reference
+    // inserting into a Map and then changing the hashcode can make it 
+    // disappear out of the Map during lookups
+    private final int hashcode;
 
     public ExprNodeDescEqualityWrapper(ExprNodeDesc exprNodeDesc) {
       this.exprNodeDesc = exprNodeDesc;
+      this.hashcode = exprNodeDesc == null ? 0 : exprNodeDesc.hashCode();
     }
 
     public ExprNodeDesc getExprNodeDesc() {
       return exprNodeDesc;
     }
 
-    public void setExprNodeDesc(ExprNodeDesc exprNodeDesc) {
-      this.exprNodeDesc = exprNodeDesc;
-    }
-
     @Override
     public boolean equals(Object other) {
 
@@ -125,7 +126,7 @@ public abstract class ExprNodeDesc implements Serializable, 
Node {
 
     @Override
     public int hashCode() {
-      return exprNodeDesc == null ? 0 : exprNodeDesc.hashCode();
+      return hashcode;
     }
 
     /* helper function to allow Set()/Collection() operations with 
ExprNodeDesc */

Reply via email to