Repository: tajo
Updated Branches:
  refs/heads/master 2950d8ec6 -> 33f4b7a06


TAJO-1715: Precompute the hash value of various kinds of ids.

Closes #658


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/33f4b7a0
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/33f4b7a0
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/33f4b7a0

Branch: refs/heads/master
Commit: 33f4b7a061d0b4f7867f89b32b880f686fe1dc51
Parents: 2950d8e
Author: Jihoon Son <[email protected]>
Authored: Wed Jul 29 16:42:49 2015 +0900
Committer: Jihoon Son <[email protected]>
Committed: Wed Jul 29 16:42:49 2015 +0900

----------------------------------------------------------------------
 CHANGES                                                       | 2 ++
 tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java  | 4 +++-
 tajo-common/src/main/java/org/apache/tajo/TaskId.java         | 4 +++-
 tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java | 4 ++--
 .../org/apache/tajo/engine/planner/physical/KeyTuple.java     | 7 ++++++-
 .../org/apache/tajo/engine/planner/physical/TupleMap.java     | 6 +++++-
 6 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 01116d3..721f8ff 100644
--- a/CHANGES
+++ b/CHANGES
@@ -32,6 +32,8 @@ Release 0.11.0 - unreleased
 
   IMPROVEMENT
 
+    TAJO-1715: Precompute the hash value of various kinds of ids. (jihoon)
+
     TAJO-1703: Remove hardcoded value in NodeStatusUpdater. (jinho)
 
     TAJO-1701: Remove forward or non-forward query concept in TajoClient. 

http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java 
b/tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java
index 78c6325..3ce8b7e 100644
--- a/tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java
+++ b/tajo-common/src/main/java/org/apache/tajo/TaskAttemptId.java
@@ -25,6 +25,7 @@ public class TaskAttemptId implements 
Comparable<TaskAttemptId> {
 
   private TaskId taskId;
   private int id;
+  private final int hashValue;
 
   public TaskId getTaskId() {
     return taskId;
@@ -41,6 +42,7 @@ public class TaskAttemptId implements 
Comparable<TaskAttemptId> {
   public TaskAttemptId(TaskId taskId, int id) {
     this.taskId = taskId;
     this.id = id;
+    this.hashValue = Objects.hashCode(taskId, id);
   }
 
   public TaskAttemptId(TajoIdProtos.TaskAttemptIdProto proto) {
@@ -80,7 +82,7 @@ public class TaskAttemptId implements 
Comparable<TaskAttemptId> {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(taskId, id);
+    return hashValue;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/tajo-common/src/main/java/org/apache/tajo/TaskId.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/TaskId.java 
b/tajo-common/src/main/java/org/apache/tajo/TaskId.java
index e1db67d..54504d9 100644
--- a/tajo-common/src/main/java/org/apache/tajo/TaskId.java
+++ b/tajo-common/src/main/java/org/apache/tajo/TaskId.java
@@ -25,10 +25,12 @@ public class TaskId implements Comparable<TaskId> {
 
   private ExecutionBlockId executionBlockId;
   private int id;
+  private final int hashValue;
 
   public TaskId(ExecutionBlockId executionBlockId, int id) {
     this.executionBlockId = executionBlockId;
     this.id = id;
+    this.hashValue = Objects.hashCode(executionBlockId, id);
   }
 
   public TaskId(TajoIdProtos.TaskIdProto proto) {
@@ -76,7 +78,7 @@ public class TaskId implements Comparable<TaskId> {
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(executionBlockId, id);
+    return hashValue;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java 
b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
index d7b648d..12570d7 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
@@ -221,8 +221,8 @@ public class VTuple implements Tuple, Cloneable {
   public VTuple clone() throws CloneNotSupportedException {
     VTuple tuple = (VTuple) super.clone();
 
-    tuple.values = new Datum[size()];
-    System.arraycopy(values, 0, tuple.values, 0, size()); //shallow copy
+    tuple.values = new Datum[values.length];
+    System.arraycopy(values, 0, tuple.values, 0, values.length); //shallow copy
     return tuple;
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/KeyTuple.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/KeyTuple.java 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/KeyTuple.java
index 39b13f8..0c4267e 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/KeyTuple.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/KeyTuple.java
@@ -27,7 +27,7 @@ import org.apache.tajo.storage.VTuple;
  * Datum.hashCode() uses MurmurHash, so its cost is not so cheap.
  *
  */
-public class KeyTuple extends VTuple {
+public class KeyTuple extends VTuple implements Cloneable {
   private int hashCode;
 
   public KeyTuple(int size) {
@@ -74,6 +74,11 @@ public class KeyTuple extends VTuple {
   }
 
   @Override
+  public KeyTuple clone() throws CloneNotSupportedException {
+    return (KeyTuple) super.clone();
+  }
+
+  @Override
   public int hashCode() {
     return hashCode;
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/33f4b7a0/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/TupleMap.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/TupleMap.java 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/TupleMap.java
index 6f72522..8c845b5 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/TupleMap.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/TupleMap.java
@@ -54,7 +54,11 @@ public class TupleMap<E> extends HashMap<KeyTuple, E> {
   @Override
   public E put(@Nullable KeyTuple key, E value) {
     if (key != null) {
-      return super.put(new KeyTuple(key.getValues()), value);
+      try {
+        return super.put(key.clone(), value);
+      } catch (CloneNotSupportedException e) {
+        throw new RuntimeException(e);
+      }
     } else {
       return super.put(null, value);
     }

Reply via email to