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);
+  }
+
+
 }