You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2010/07/27 01:24:32 UTC
svn commit: r979486 - in /hadoop/common/branches/branch-0.20: CHANGES.txt
src/core/ src/core/org/apache/hadoop/io/WritableComparator.java src/test/
src/test/org/apache/hadoop/io/TestWritable.java
Author: cutting
Date: Mon Jul 26 23:24:32 2010
New Revision: 979486
URL: http://svn.apache.org/viewvc?rev=979486&view=rev
Log:
Merge r979485 from trunk to 0.20 branch. Fixes HADOOP-6881.
Modified:
hadoop/common/branches/branch-0.20/CHANGES.txt
hadoop/common/branches/branch-0.20/src/core/ (props changed)
hadoop/common/branches/branch-0.20/src/core/org/apache/hadoop/io/WritableComparator.java
hadoop/common/branches/branch-0.20/src/test/ (props changed)
hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/io/TestWritable.java
Modified: hadoop/common/branches/branch-0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20/CHANGES.txt?rev=979486&r1=979485&r2=979486&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.20/CHANGES.txt Mon Jul 26 23:24:32 2010
@@ -42,6 +42,11 @@ Release 0.20.3 - Unreleased
HDFS-132. Fix namenode to not report files deleted metrics for deletions
done while replaying edits during startup. (suresh & shv)
+ HADOOP-6881. Make WritableComparator intialize classes when
+ looking for their raw comparator, as classes often register raw
+ comparators in initializers, which are no longer automatically run
+ in Java 6 when a class is referenced. (cutting via omalley)
+
IMPROVEMENTS
MAPREDUCE-1407. Update javadoc in mapreduce.{Mapper,Reducer} to match
Propchange: hadoop/common/branches/branch-0.20/src/core/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Jul 26 23:24:32 2010
@@ -0,0 +1,4 @@
+/hadoop/common/trunk/src/core:910709
+/hadoop/common/trunk/src/java:979485
+/hadoop/core/branches/branch-0.19/src/core:713112
+/hadoop/core/trunk/src/core:727001,727117,727191,727212,727217,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,736426,738328,738697,740077,740157,741703,741762,743745,743816,743892,744894,745180,746010,746206,746227,746233,746274,746338,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755960,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,771661,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569
Modified: hadoop/common/branches/branch-0.20/src/core/org/apache/hadoop/io/WritableComparator.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20/src/core/org/apache/hadoop/io/WritableComparator.java?rev=979486&r1=979485&r2=979486&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20/src/core/org/apache/hadoop/io/WritableComparator.java (original)
+++ hadoop/common/branches/branch-0.20/src/core/org/apache/hadoop/io/WritableComparator.java Mon Jul 26 23:24:32 2010
@@ -38,13 +38,38 @@ public class WritableComparator implemen
new HashMap<Class, WritableComparator>(); // registry
/** Get a comparator for a {@link WritableComparable} implementation. */
- public static synchronized WritableComparator get(Class<? extends WritableComparable> c) {
+ public static synchronized
+ WritableComparator get(Class<? extends WritableComparable> c) {
WritableComparator comparator = comparators.get(c);
- if (comparator == null)
- comparator = new WritableComparator(c, true);
+ if (comparator == null) {
+ // force the static initializers to run
+ forceInit(c);
+ // look to see if it is defined now
+ comparator = comparators.get(c);
+ // if not, use the generic one
+ if (comparator == null) {
+ comparator = new WritableComparator(c, true);
+ comparators.put(c, comparator);
+ }
+ }
return comparator;
}
+ /**
+ * Force initialization of the static members.
+ * As of Java 5, referencing a class doesn't force it to initialize. Since
+ * this class requires that the classes be initialized to declare their
+ * comparators, we force that initialization to happen.
+ * @param cls the class to initialize
+ */
+ private static void forceInit(Class<?> cls) {
+ try {
+ Class.forName(cls.getName(), true, cls.getClassLoader());
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("Can't initialize class " + cls, e);
+ }
+ }
+
/** Register an optimized comparator for a {@link WritableComparable}
* implementation. */
public static synchronized void define(Class c,
Propchange: hadoop/common/branches/branch-0.20/src/test/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Mon Jul 26 23:24:32 2010
@@ -0,0 +1,4 @@
+/hadoop/common/trunk/src/test:910709
+/hadoop/common/trunk/src/test/core:979485
+/hadoop/core/branches/branch-0.19/src/test:713112
+/hadoop/core/trunk/src/test:727001,727117,727191,727212,727217,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,736426,738328,738697,740077,740157,741703,741762,743745,743816,743892,744894,745180,746010,746206,746227,746233,746274,746338,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755960,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,771661,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569
Modified: hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/io/TestWritable.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/io/TestWritable.java?rev=979486&r1=979485&r2=979486&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/io/TestWritable.java (original)
+++ hadoop/common/branches/branch-0.20/src/test/org/apache/hadoop/io/TestWritable.java Mon Jul 26 23:24:32 2010
@@ -96,4 +96,27 @@ public class TestWritable extends TestCa
return after;
}
+ private static class FrobComparator extends WritableComparator {
+ public FrobComparator() { super(Frob.class); }
+ @Override public int compare(byte[] b1, int s1, int l1,
+ byte[] b2, int s2, int l2) {
+ return 0;
+ }
+ }
+
+ private static class Frob implements WritableComparable {
+ static { // register default comparator
+ WritableComparator.define(Frob.class, new FrobComparator());
+ }
+ @Override public void write(DataOutput out) throws IOException {}
+ @Override public void readFields(DataInput in) throws IOException {}
+ @Override public int compareTo(Object o) { return 0; }
+ }
+
+ /** Test that comparator is defined. */
+ public static void testGetComparator() throws Exception {
+ assert(WritableComparator.get(Frob.class) instanceof FrobComparator);
+ }
+
+
}