HADOOP-8619. WritableComparator must implement no-arg constructor. Contributed by Chris Douglas.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1378120 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Suresh Srinivas 2012-08-28 13:05:31 +00:00
parent 7fff7b42bf
commit e7b12c89e1
3 changed files with 56 additions and 2 deletions

View File

@ -98,6 +98,9 @@ Trunk (unreleased changes)
HADOOP-8719. Workaround for kerberos-related log errors upon running any HADOOP-8719. Workaround for kerberos-related log errors upon running any
hadoop command on OSX. (Jianbin Wei via harsh) hadoop command on OSX. (Jianbin Wei via harsh)
HADOOP-8619. WritableComparator must implement no-arg constructor.
(Chris Douglas via Suresh)
BUG FIXES BUG FIXES
HADOOP-8177. MBeans shouldn't try to register when it fails to create MBeanName. HADOOP-8177. MBeans shouldn't try to register when it fails to create MBeanName.

View File

@ -87,6 +87,10 @@ public class WritableComparator implements RawComparator {
private final WritableComparable key2; private final WritableComparable key2;
private final DataInputBuffer buffer; private final DataInputBuffer buffer;
protected WritableComparator() {
this(null);
}
/** Construct for a {@link WritableComparable} implementation. */ /** Construct for a {@link WritableComparable} implementation. */
protected WritableComparator(Class<? extends WritableComparable> keyClass) { protected WritableComparator(Class<? extends WritableComparable> keyClass) {
this(keyClass, false); this(keyClass, false);

View File

@ -18,25 +18,34 @@
package org.apache.hadoop.io.serializer; package org.apache.hadoop.io.serializer;
import java.io.Serializable;
import org.apache.hadoop.io.DataInputBuffer;
import org.apache.hadoop.io.DataOutputBuffer;
import static org.apache.hadoop.io.TestGenericWritable.CONF_TEST_KEY; import static org.apache.hadoop.io.TestGenericWritable.CONF_TEST_KEY;
import static org.apache.hadoop.io.TestGenericWritable.CONF_TEST_VALUE; import static org.apache.hadoop.io.TestGenericWritable.CONF_TEST_VALUE;
import junit.framework.TestCase;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.TestGenericWritable.Baz; import org.apache.hadoop.io.TestGenericWritable.Baz;
import org.apache.hadoop.io.TestGenericWritable.FooGenericWritable; import org.apache.hadoop.io.TestGenericWritable.FooGenericWritable;
import org.apache.hadoop.io.WritableComparator;
public class TestWritableSerialization extends TestCase { import org.junit.Test;
import static org.junit.Assert.*;
public class TestWritableSerialization {
private static final Configuration conf = new Configuration(); private static final Configuration conf = new Configuration();
@Test
public void testWritableSerialization() throws Exception { public void testWritableSerialization() throws Exception {
Text before = new Text("test writable"); Text before = new Text("test writable");
Text after = SerializationTestUtil.testSerialization(conf, before); Text after = SerializationTestUtil.testSerialization(conf, before);
assertEquals(before, after); assertEquals(before, after);
} }
@Test
public void testWritableConfigurable() throws Exception { public void testWritableConfigurable() throws Exception {
//set the configuration parameter //set the configuration parameter
@ -52,4 +61,42 @@ public class TestWritableSerialization extends TestCase {
assertEquals(baz, result); assertEquals(baz, result);
assertNotNull(result.getConf()); assertNotNull(result.getConf());
} }
@Test
@SuppressWarnings({"rawtypes", "unchecked"})
public void testWritableComparatorJavaSerialization() throws Exception {
Serialization ser = new JavaSerialization();
Serializer<TestWC> serializer = ser.getSerializer(TestWC.class);
DataOutputBuffer dob = new DataOutputBuffer();
serializer.open(dob);
TestWC orig = new TestWC(0);
serializer.serialize(orig);
serializer.close();
Deserializer<TestWC> deserializer = ser.getDeserializer(TestWC.class);
DataInputBuffer dib = new DataInputBuffer();
dib.reset(dob.getData(), 0, dob.getLength());
deserializer.open(dib);
TestWC deser = deserializer.deserialize(null);
deserializer.close();
assertEquals(orig, deser);
}
static class TestWC extends WritableComparator implements Serializable {
static final long serialVersionUID = 0x4344;
final int val;
TestWC() { this(7); }
TestWC(int val) { this.val = val; }
@Override
public boolean equals(Object o) {
if (o instanceof TestWC) {
return ((TestWC)o).val == val;
}
return false;
}
@Override
public int hashCode() { return val; }
}
} }