فهرست منبع

HADOOP-5809. Fix job submission, broken by errant directory creation. Contributed by Sreekanth Ramakrishnan and Jothi Padmanabhan

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@778921 13f79535-47bb-0310-9956-ffa450edef68
Christopher Douglas 16 سال پیش
والد
کامیت
c2be8cb5f5

+ 3 - 0
CHANGES.txt

@@ -682,6 +682,9 @@ Trunk (unreleased changes)
     HADOOP-5710. Counter MAP_INPUT_BYTES missing from new mapreduce api. 
     (Amareshwari Sriramadasu via sharad)
 
+    HADOOP-5809. Fix job submission, broken by errant directory creation.
+    (Sreekanth Ramakrishnan and Jothi Padmanabhan via cdouglas)
+
 Release 0.20.1 - Unreleased
 
   INCOMPATIBLE CHANGES

+ 2 - 2
src/core/org/apache/hadoop/util/RunJar.java

@@ -108,7 +108,7 @@ public class RunJar {
 
     File tmpDir = new File(new Configuration().get("hadoop.tmp.dir"));
     boolean b = tmpDir.mkdirs();
-    if (!b || !tmpDir.isDirectory()) { 
+    if (!b && !tmpDir.isDirectory()) { 
       System.err.println("Mkdirs failed to create " + tmpDir);
       System.exit(-1);
     }
@@ -119,7 +119,7 @@ public class RunJar {
       System.exit(-1);
     }
     b = workDir.mkdirs();
-    if (!b || !workDir.isDirectory()) {
+    if (!b && !workDir.isDirectory()) {
       System.err.println("Mkdirs failed to create " + workDir);
       System.exit(-1);
     }

+ 49 - 0
src/test/mapred/org/apache/hadoop/util/TestRunJar.java

@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.util;
+
+
+import java.io.File;
+import org.apache.hadoop.fs.Path;
+
+import junit.framework.TestCase;
+
+/**
+ * A test to rest the RunJar class.
+ */
+public class TestRunJar extends TestCase {
+  
+  private static String TEST_ROOT_DIR = new Path(System.getProperty(
+      "test.build.data", "/tmp")).toString();
+  
+  public void testRunjar() throws Throwable {
+  
+   File outFile = new File(TEST_ROOT_DIR, "out");
+     // delete if output file already exists.
+    if (outFile.exists()) {
+      outFile.delete();
+    }
+    
+    String[] args = new String[3];
+    args[0] = "build/test/mapred/testjar/testjob.jar";
+    args[1] = "testjar.Hello";
+    args[2] = outFile.toString();
+    RunJar.main(args);
+    assertTrue("RunJar failed", outFile.exists());
+  }
+}

+ 40 - 0
src/test/mapred/testjar/Hello.java

@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package testjar;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * A simple Hello class that is called from TestRunJar 
+ *
+ */
+public class Hello {
+  public static void main(String[] args){
+    try {
+      System.out.println("Creating file" + args[0]);
+      FileOutputStream fstream = new FileOutputStream(args[0]);
+      fstream.write("Hello Hadoopers".getBytes());
+      fstream.close();
+    } 
+    catch (IOException e) {
+      //do nothing
+    }
+  }
+}