Author: suresh Date: Tue Aug 28 13:05:31 2012 New Revision: 1378120 URL: http://svn.apache.org/viewvc?rev=1378120&view=rev Log: HADOOP-8619. WritableComparator must implement no-arg constructor. Contributed by Chris Douglas.
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/WritableComparator.java hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/TestWritableSerialization.java Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1378120&r1=1378119&r2=1378120&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Tue Aug 28 13:05:31 2012 @@ -98,6 +98,9 @@ Trunk (unreleased changes) HADOOP-8719. Workaround for kerberos-related log errors upon running any hadoop command on OSX. (Jianbin Wei via harsh) + HADOOP-8619. WritableComparator must implement no-arg constructor. + (Chris Douglas via Suresh) + BUG FIXES HADOOP-8177. MBeans shouldn't try to register when it fails to create MBeanName. Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/WritableComparator.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/WritableComparator.java?rev=1378120&r1=1378119&r2=1378120&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/WritableComparator.java (original) +++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/WritableComparator.java Tue Aug 28 13:05:31 2012 @@ -87,6 +87,10 @@ public class WritableComparator implemen private final WritableComparable key2; private final DataInputBuffer buffer; + protected WritableComparator() { + this(null); + } + /** Construct for a {@link WritableComparable} implementation. */ protected WritableComparator(Class<? extends WritableComparable> keyClass) { this(keyClass, false); Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/TestWritableSerialization.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/TestWritableSerialization.java?rev=1378120&r1=1378119&r2=1378120&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/TestWritableSerialization.java (original) +++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/serializer/TestWritableSerialization.java Tue Aug 28 13:05:31 2012 @@ -18,25 +18,34 @@ 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_VALUE; -import junit.framework.TestCase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.TestGenericWritable.Baz; import org.apache.hadoop.io.TestGenericWritable.FooGenericWritable; +import org.apache.hadoop.io.WritableComparator; + +import org.junit.Test; +import static org.junit.Assert.*; -public class TestWritableSerialization extends TestCase { +public class TestWritableSerialization { private static final Configuration conf = new Configuration(); + @Test public void testWritableSerialization() throws Exception { Text before = new Text("test writable"); Text after = SerializationTestUtil.testSerialization(conf, before); assertEquals(before, after); } + @Test public void testWritableConfigurable() throws Exception { //set the configuration parameter @@ -52,4 +61,42 @@ public class TestWritableSerialization e assertEquals(baz, result); 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; } + } + }