From 6c44a72990c2177f669c76472dbde87fe81366ba Mon Sep 17 00:00:00 2001 From: Jihoon Son Date: Tue, 28 Jul 2015 15:08:15 +0900 Subject: [PATCH] TAJO-1715 --- .../src/main/java/org/apache/tajo/TaskAttemptId.java | 4 +++- tajo-common/src/main/java/org/apache/tajo/TaskId.java | 4 +++- .../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 +++++- 5 files changed, 19 insertions(+), 6 deletions(-) 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 78c6325ac6..3ce8b7edcd 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 { private TaskId taskId; private int id; + private final int hashValue; public TaskId getTaskId() { return taskId; @@ -41,6 +42,7 @@ public void setId(int id) { 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 boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hashCode(taskId, id); + return hashValue; } @Override 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 e1db67d9f2..54504d95f8 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 { 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 boolean equals(Object obj) { @Override public int hashCode() { - return Objects.hashCode(executionBlockId, id); + return hashValue; } @Override 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 d7b648d8c8..12570d739a 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 char[] getUnicodeChars(int fieldId) { 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; } 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 39b13f8987..0c4267e913 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 @@ * 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) { @@ -73,6 +73,11 @@ public void put(Datum [] values) { updateHashCode(); } + @Override + public KeyTuple clone() throws CloneNotSupportedException { + return (KeyTuple) super.clone(); + } + @Override public int hashCode() { return hashCode; 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 6f725220d2..8c845b5687 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 TupleMap(TupleMap tupleMap){ @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); }