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 dd...@apache.org on 2008/11/07 11:12:11 UTC
svn commit: r712102 - in /hadoop/core/trunk: CHANGES.txt
src/core/org/apache/hadoop/util/ReflectionUtils.java
src/test/org/apache/hadoop/util/TestReflectionUtils.java
Author: ddas
Date: Fri Nov 7 02:12:05 2008
New Revision: 712102
URL: http://svn.apache.org/viewvc?rev=712102&view=rev
Log:
HADOOP-4187. Does a runtime lookup for JobConf/JobConfigurable, and if found, invokes the appropriate configure method. Contributed by Sharad Agarwal.
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/core/org/apache/hadoop/util/ReflectionUtils.java
hadoop/core/trunk/src/test/org/apache/hadoop/util/TestReflectionUtils.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=712102&r1=712101&r2=712102&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Fri Nov 7 02:12:05 2008
@@ -60,6 +60,9 @@
HADOOP-4572. Change INode and its sub-classes to package private. (szetszwo)
+ HADOOP-4187. Does a runtime lookup for JobConf/JobConfigurable, and if found,
+ invokes the appropriate configure method. (Sharad Agarwal via ddas)
+
OPTIMIZATIONS
BUG FIXES
Modified: hadoop/core/trunk/src/core/org/apache/hadoop/util/ReflectionUtils.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/core/org/apache/hadoop/util/ReflectionUtils.java?rev=712102&r1=712101&r2=712102&view=diff
==============================================================================
--- hadoop/core/trunk/src/core/org/apache/hadoop/util/ReflectionUtils.java (original)
+++ hadoop/core/trunk/src/core/org/apache/hadoop/util/ReflectionUtils.java Fri Nov 7 02:12:05 2008
@@ -19,6 +19,7 @@
package org.apache.hadoop.util;
import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
import java.io.*;
import java.lang.management.*;
import java.util.Map;
@@ -26,7 +27,6 @@
import org.apache.commons.logging.Log;
import org.apache.hadoop.conf.*;
-import org.apache.hadoop.mapred.*;
/**
* General reflection utils
@@ -53,10 +53,36 @@
if (theObject instanceof Configurable) {
((Configurable) theObject).setConf(conf);
}
- if (conf instanceof JobConf &&
- theObject instanceof JobConfigurable) {
- ((JobConfigurable)theObject).configure((JobConf) conf);
+ setJobConf(theObject, conf);
+ }
+ }
+
+ /**
+ * This code is to support backward compatibility and break the compile
+ * time dependency of core on mapred.
+ * This should be made deprecated along with the mapred package HADOOP-1230.
+ * Should be removed when mapred package is removed.
+ */
+ private static void setJobConf(Object theObject, Configuration conf) {
+ //If JobConf and JobConfigurable are in classpath, AND
+ //theObject is of type JobConfigurable AND
+ //conf is of type JobConf then
+ //invoke configure on theObject
+ try {
+ Class<?> jobConfClass =
+ conf.getClassByName("org.apache.hadoop.mapred.JobConf");
+ Class<?> jobConfigurableClass =
+ conf.getClassByName("org.apache.hadoop.mapred.JobConfigurable");
+ if (jobConfClass.isAssignableFrom(conf.getClass()) &&
+ jobConfigurableClass.isAssignableFrom(theObject.getClass())) {
+ Method configureMethod =
+ jobConfigurableClass.getMethod("configure", jobConfClass);
+ configureMethod.invoke(theObject, conf);
}
+ } catch (ClassNotFoundException e) {
+ //JobConf/JobConfigurable not in classpath. no need to configure
+ } catch (Exception e) {
+ throw new RuntimeException("Error in configuring object", e);
}
}
Modified: hadoop/core/trunk/src/test/org/apache/hadoop/util/TestReflectionUtils.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/util/TestReflectionUtils.java?rev=712102&r1=712101&r2=712102&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/util/TestReflectionUtils.java (original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/util/TestReflectionUtils.java Fri Nov 7 02:12:05 2008
@@ -21,6 +21,10 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashMap;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.JobConfigurable;
import junit.framework.TestCase;
@@ -107,5 +111,26 @@
public static class NoDefaultCtor {
public NoDefaultCtor(int x) {}
+ }
+
+ /**
+ * This is to test backward compatibility of ReflectionUtils for
+ * JobConfigurable objects.
+ * This should be made deprecated along with the mapred package HADOOP-1230.
+ * Should be removed when mapred package is removed.
+ */
+ public void testSetConf() {
+ JobConfigurableOb ob = new JobConfigurableOb();
+ ReflectionUtils.setConf(ob, new Configuration());
+ assertFalse(ob.configured);
+ ReflectionUtils.setConf(ob, new JobConf());
+ assertTrue(ob.configured);
+ }
+
+ private static class JobConfigurableOb implements JobConfigurable {
+ boolean configured;
+ public void configure(JobConf job) {
+ configured = true;
+ }
}
}