Explorar o código

HADOOP-2997. Adds test for non-writable serialier. Also fixes a problem introduced by HADOOP-2399. Contirbuted by Tom White.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@642164 13f79535-47bb-0310-9956-ffa450edef68
Devaraj Das %!s(int64=17) %!d(string=hai) anos
pai
achega
40b9a6d6be
Modificáronse 2 ficheiros con 6 adicións e 5 borrados
  1. 3 0
      CHANGES.txt
  2. 3 5
      src/java/org/apache/hadoop/mapred/ReduceTask.java

+ 3 - 0
CHANGES.txt

@@ -398,6 +398,9 @@ Trunk (unreleased changes)
     HADOOP-3064. Commas in a file path should not be treated as delimiters.
     HADOOP-3064. Commas in a file path should not be treated as delimiters.
     (Hairong Kuang via shv)
     (Hairong Kuang via shv)
 
 
+    HADOOP-2997. Adds test for non-writable serialier. Also fixes a problem 
+    introduced by HADOOP-2399. (Tom White via ddas)
+
 Release 0.16.2 - Unreleased
 Release 0.16.2 - Unreleased
 
 
   BUG FIXES
   BUG FIXES

+ 3 - 5
src/java/org/apache/hadoop/mapred/ReduceTask.java

@@ -209,8 +209,6 @@ class ReduceTask extends Task {
       this.in = in;
       this.in = in;
       this.comparator = comparator;
       this.comparator = comparator;
       this.reporter = reporter;
       this.reporter = reporter;
-      nextKey = (KEY) ReflectionUtils.newInstance(keyClass, conf);
-      value = (VALUE) ReflectionUtils.newInstance(valClass, conf);
       SerializationFactory serializationFactory = new SerializationFactory(conf);
       SerializationFactory serializationFactory = new SerializationFactory(conf);
       this.keyDeserializer = serializationFactory.getDeserializer(keyClass);
       this.keyDeserializer = serializationFactory.getDeserializer(keyClass);
       this.keyDeserializer.open(keyIn);
       this.keyDeserializer.open(keyIn);
@@ -218,7 +216,7 @@ class ReduceTask extends Task {
       this.valDeserializer.open(valIn);
       this.valDeserializer.open(valIn);
       readNextKey();
       readNextKey();
       key = nextKey;
       key = nextKey;
-      nextKey = (KEY) ReflectionUtils.newInstance(keyClass, conf);
+      nextKey = null; // force new instance creation
       hasNext = more;
       hasNext = more;
     }
     }
 
 
@@ -275,7 +273,7 @@ class ReduceTask extends Task {
       if (more) {
       if (more) {
         DataOutputBuffer nextKeyBytes = in.getKey();
         DataOutputBuffer nextKeyBytes = in.getKey();
         keyIn.reset(nextKeyBytes.getData(), nextKeyBytes.getLength());
         keyIn.reset(nextKeyBytes.getData(), nextKeyBytes.getLength());
-        keyDeserializer.deserialize(nextKey);
+        nextKey = keyDeserializer.deserialize(nextKey);
         hasNext = key != null && (comparator.compare(key, nextKey) == 0);
         hasNext = key != null && (comparator.compare(key, nextKey) == 0);
       } else {
       } else {
         hasNext = false;
         hasNext = false;
@@ -290,7 +288,7 @@ class ReduceTask extends Task {
       nextValue.reset();
       nextValue.reset();
       in.getValue().writeUncompressedBytes(nextValue);
       in.getValue().writeUncompressedBytes(nextValue);
       valIn.reset(nextValue.getData(), nextValue.getLength());
       valIn.reset(nextValue.getData(), nextValue.getLength());
-      valDeserializer.deserialize(value);
+      value = valDeserializer.deserialize(value);
     }
     }
   }
   }