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