You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by rk...@apache.org on 2013/02/04 19:03:28 UTC

svn commit: r1442265 - in /oozie/branches/branch-3.3: core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java release-log.txt

Author: rkanter
Date: Mon Feb  4 18:03:27 2013
New Revision: 1442265

URL: http://svn.apache.org/viewvc?rev=1442265&view=rev
Log:
OOZIE-1153 comma separated list in <archive> and <file> for JavaActionExecutor. (jaoki via tucu)

Modified:
    oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
    oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java
    oozie/branches/branch-3.3/release-log.txt

Modified: oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java?rev=1442265&r1=1442264&r2=1442265&view=diff
==============================================================================
--- oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java (original)
+++ oozie/branches/branch-3.3/core/src/main/java/org/apache/oozie/action/hadoop/JavaActionExecutor.java Mon Feb  4 18:03:27 2013
@@ -478,13 +478,15 @@ public class JavaActionExecutor extends 
         // files and archives defined in the action
         for (Element eProp : (List<Element>) actionXml.getChildren()) {
             if (eProp.getName().equals("file")) {
-                String path = eProp.getTextTrim();
-                addToCache(conf, appPath, path, false);
+                String[] pathes = eProp.getTextTrim().split(",");
+                for (String path : pathes) {
+                    addToCache(conf, appPath, path.trim(), false);
+                }
             }
-            else {
-                if (eProp.getName().equals("archive")) {
-                    String path = eProp.getTextTrim();
-                    addToCache(conf, appPath, path, true);
+            else if (eProp.getName().equals("archive")) {
+                String[] pathes = eProp.getTextTrim().split(",");
+                for (String path : pathes){
+                    addToCache(conf, appPath, path.trim(), true);
                 }
             }
         }

Modified: oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java?rev=1442265&r1=1442264&r2=1442265&view=diff
==============================================================================
--- oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java (original)
+++ oozie/branches/branch-3.3/core/src/test/java/org/apache/oozie/action/hadoop/TestJavaActionExecutor.java Mon Feb  4 18:03:27 2013
@@ -46,6 +46,7 @@ import org.apache.oozie.WorkflowActionBe
 import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.action.ActionExecutor;
 import org.apache.oozie.action.ActionExecutorException;
+import org.apache.oozie.action.hadoop.ActionExecutorTestCase.Context;
 import org.apache.oozie.client.OozieClient;
 import org.apache.oozie.client.WorkflowAction;
 import org.apache.oozie.client.WorkflowJob;
@@ -724,6 +725,114 @@ public class TestJavaActionExecutor exte
         }
     }
 
+    /**
+     * https://issues.apache.org/jira/browse/OOZIE-87
+     * @throws Exception
+     */
+    public void testCommaSeparatedFilesAndArchives() throws Exception {
+        Path root = new Path(getFsTestCaseDir(), "root");
+
+        Path jar = new Path("jar.jar");
+        getFileSystem().create(new Path(getAppPath(), jar)).close();
+        Path rootJar = new Path(root, "rootJar.jar");
+        getFileSystem().create(rootJar).close();
+
+        Path file = new Path("file");
+        getFileSystem().create(new Path(getAppPath(), file)).close();
+        Path rootFile = new Path(root, "rootFile");
+        getFileSystem().create(rootFile).close();
+
+        Path so = new Path("soFile.so");
+        getFileSystem().create(new Path(getAppPath(), so)).close();
+        Path rootSo = new Path(root, "rootSoFile.so");
+        getFileSystem().create(rootSo).close();
+
+        Path so1 = new Path("soFile.so.1");
+        getFileSystem().create(new Path(getAppPath(), so1)).close();
+        Path rootSo1 = new Path(root, "rootSoFile.so.1");
+        getFileSystem().create(rootSo1).close();
+
+        Path archive = new Path("archive.tar");
+        getFileSystem().create(new Path(getAppPath(), archive)).close();
+        Path rootArchive = new Path(root, "rootArchive.tar");
+        getFileSystem().create(rootArchive).close();
+
+        String actionXml = "<java>" +
+                "      <job-tracker>" + getJobTrackerUri() + "</job-tracker>" +
+                "      <name-node>" + getNameNodeUri() + "</name-node>" +
+                "      <main-class>CLASS</main-class>" +
+                "      <file>" + jar.toString() +
+                            "," + rootJar.toString() +
+                            "," + file.toString() +
+                            ", " + rootFile.toString() + // with leading and trailing spaces
+                            "  ," + so.toString() +
+                            "," + rootSo.toString() +
+                            "," + so1.toString() +
+                            "," + rootSo1.toString() + "</file>\n" +
+                "      <archive>" + archive.toString() + ", "
+                            + rootArchive.toString() + " </archive>\n" + // with leading and trailing spaces
+                "</java>";
+
+        Element eActionXml = XmlUtils.parseXml(actionXml);
+
+        Context context = createContext(actionXml, null);
+
+        Path appPath = getAppPath();
+
+        JavaActionExecutor ae = new JavaActionExecutor();
+
+        Configuration jobConf = ae.createBaseHadoopConf(context, eActionXml);
+        ae.setupActionConf(jobConf, context, eActionXml, appPath);
+        ae.setLibFilesArchives(context, eActionXml, appPath, jobConf);
+
+
+        assertTrue(DistributedCache.getSymlink(jobConf));
+
+        Path[] filesInClasspath = DistributedCache.getFileClassPaths(jobConf);
+        for (Path p : new Path[]{new Path(getAppPath(), jar), rootJar}) {
+            boolean found = false;
+            for (Path c : filesInClasspath) {
+                if (!found && p.toUri().getPath().equals(c.toUri().getPath())) {
+                    found = true;
+                }
+            }
+            assertTrue("file " + p.toUri().getPath() + " not found in classpath", found);
+        }
+        for (Path p : new Path[]{new Path(getAppPath(), file), rootFile, new Path(getAppPath(), so), rootSo,
+                                new Path(getAppPath(), so1), rootSo1}) {
+            boolean found = false;
+            for (Path c : filesInClasspath) {
+                if (!found && p.toUri().getPath().equals(c.toUri().getPath())) {
+                    found = true;
+                }
+            }
+            assertFalse("file " + p.toUri().getPath() + " found in classpath", found);
+        }
+
+        URI[] filesInCache = DistributedCache.getCacheFiles(jobConf);
+        for (Path p : new Path[]{new Path(getAppPath(), jar), rootJar, new Path(getAppPath(), file), rootFile,
+                                new Path(getAppPath(), so), rootSo, new Path(getAppPath(), so1), rootSo1}) {
+            boolean found = false;
+            for (URI c : filesInCache) {
+                if (!found && p.toUri().getPath().equals(c.getPath())) {
+                    found = true;
+                }
+            }
+            assertTrue("file " + p.toUri().getPath() + " not found in cache", found);
+        }
+
+        URI[] archivesInCache = DistributedCache.getCacheArchives(jobConf);
+        for (Path p : new Path[]{new Path(getAppPath(), archive), rootArchive}) {
+            boolean found = false;
+            for (URI c : archivesInCache) {
+                if (!found && p.toUri().getPath().equals(c.getPath())) {
+                    found = true;
+                }
+            }
+            assertTrue("archive " + p.toUri().getPath() + " not found in cache", found);
+        }
+    }
+
     public void testPrepare() throws Exception {
         FileSystem fs = getFileSystem();
         Path mkdir = new Path(getFsTestCaseDir(), "mkdir");

Modified: oozie/branches/branch-3.3/release-log.txt
URL: http://svn.apache.org/viewvc/oozie/branches/branch-3.3/release-log.txt?rev=1442265&r1=1442264&r2=1442265&view=diff
==============================================================================
--- oozie/branches/branch-3.3/release-log.txt (original)
+++ oozie/branches/branch-3.3/release-log.txt Mon Feb  4 18:03:27 2013
@@ -1,5 +1,6 @@
 -- Oozie 3.3.2 (unreleased)
 
+OOZIE-1153 comma separated list in <archive> and <file> for JavaActionExecutor. (jaoki via tucu)
 OOZIE-1161 Remove unnecessary db updates for some of the blobs like missing_dependencies' of Coordinator Action (virag)
 OOZIE-1164 typo in toString() method for org.apache.oozie.client.rest.JsonCoordinatorJob.java (bowenzhangusa via rkanter)
 OOZIE-1152 Unit test for JavaActionExecutor has a wrong action XML (jaoki via harsh)