Repository: tajo Updated Branches: refs/heads/master 1ab39706e -> d3727c735
TAJO-1020: TajoContainerProxy::assignExecutionBlock causes NPE by race condition. Closes #127 Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/d3727c73 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/d3727c73 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/d3727c73 Branch: refs/heads/master Commit: d3727c73560f4d4c0fd3d2ead84b577e6f3a51b1 Parents: 1ab3970 Author: Hyunsik Choi <[email protected]> Authored: Wed Aug 27 20:19:10 2014 +0900 Committer: Hyunsik Choi <[email protected]> Committed: Wed Aug 27 20:19:10 2014 +0900 ---------------------------------------------------------------------- CHANGES | 3 +++ .../java/org/apache/tajo/util/KeyValueSet.java | 17 +++++------------ 2 files changed, 8 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/d3727c73/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 77c53d5..269c307 100644 --- a/CHANGES +++ b/CHANGES @@ -127,6 +127,9 @@ Release 0.9.0 - unreleased BUG FIXES + TAJO-1020: TajoContainerProxy::assignExecutionBlock causes NPE by race. + (hyunsik) + TAJO-986: Task scheduler gets incorrect task size. (Mai Hai Thanh via jihoon) TAJO-873: Query status is still RUNNING after session expired. http://git-wip-us.apache.org/repos/asf/tajo/blob/d3727c73/tajo-common/src/main/java/org/apache/tajo/util/KeyValueSet.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/util/KeyValueSet.java b/tajo-common/src/main/java/org/apache/tajo/util/KeyValueSet.java index 6edb547..c1e7092 100644 --- a/tajo-common/src/main/java/org/apache/tajo/util/KeyValueSet.java +++ b/tajo-common/src/main/java/org/apache/tajo/util/KeyValueSet.java @@ -37,9 +37,7 @@ public class KeyValueSet implements ProtoObject<KeyValueSetProto>, Cloneable, Gs public static final String TRUE_STR = "true"; public static final String FALSE_STR = "false"; - private KeyValueSetProto.Builder builder = KeyValueSetProto.newBuilder(); - - @Expose private Map<String,String> keyVals; + @Expose private Map<String,String> keyVals; public KeyValueSet() { keyVals = TUtil.newHashMap(); @@ -221,27 +219,22 @@ public class KeyValueSet implements ProtoObject<KeyValueSetProto>, Cloneable, Gs @Override public Object clone() throws CloneNotSupportedException { KeyValueSet keyValueSet = (KeyValueSet) super.clone(); - keyValueSet.builder = KeyValueSetProto.newBuilder(); keyValueSet.keyVals = keyVals != null ? new HashMap<String, String>(keyVals) : null; return keyValueSet; } @Override public KeyValueSetProto getProto() { - if (builder == null) { - builder = KeyValueSetProto.newBuilder(); - } else { - builder.clear(); - } + KeyValueSetProto.Builder builder = KeyValueSetProto.newBuilder(); - KeyValueProto.Builder kvBuilder; + KeyValueProto.Builder kvBuilder = KeyValueProto.newBuilder(); if(this.keyVals != null) { for(Entry<String,String> kv : keyVals.entrySet()) { - kvBuilder = KeyValueProto.newBuilder(); kvBuilder.setKey(kv.getKey()); - kvBuilder.setValue(kv.getValue()); builder.addKeyval(kvBuilder.build()); + + kvBuilder.clear(); } } return builder.build();
