Author: rkanter
Date: Wed Jul 10 23:37:01 2013
New Revision: 1502059

URL: http://svn.apache.org/r1502059
Log:
OOZIE-1447 Sqoop actions that don't launch a map reduce job fail with an 
IllegalArgumentException (jarcec via rkanter)

Modified:
    
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java
    oozie/trunk/release-log.txt
    
oozie/trunk/sharelib/sqoop/src/test/java/org/apache/oozie/action/hadoop/TestSqoopActionExecutor.java

Modified: 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java?rev=1502059&r1=1502058&r2=1502059&view=diff
==============================================================================
--- 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java
 (original)
+++ 
oozie/trunk/core/src/main/java/org/apache/oozie/action/hadoop/SqoopActionExecutor.java
 Wed Jul 10 23:37:01 2013
@@ -142,26 +142,29 @@ public class SqoopActionExecutor extends
                 // Cumulative counters for all Sqoop mapreduce jobs
                 Counters counters = null;
 
+                // Sqoop do not have to create mapreduce job each time
                 String externalIds = action.getExternalChildIDs();
-                String []jobIds = externalIds.split(",");
+                if (externalIds != null && !externalIds.trim().isEmpty()) {
+                    String []jobIds = externalIds.split(",");
 
-                for(String jobId : jobIds) {
-                    RunningJob runningJob = 
jobClient.getJob(JobID.forName(jobId));
-                    if (runningJob == null) {
-                      throw new 
ActionExecutorException(ActionExecutorException.ErrorType.FAILED, "SQOOP001",
-                        "Unknown hadoop job [{0}] associated with action 
[{1}].  Failing this action!", action
-                        .getExternalId(), action.getId());
-                    }
+                    for(String jobId : jobIds) {
+                        RunningJob runningJob = 
jobClient.getJob(JobID.forName(jobId));
+                        if (runningJob == null) {
+                          throw new 
ActionExecutorException(ActionExecutorException.ErrorType.FAILED, "SQOOP001",
+                            "Unknown hadoop job [{0}] associated with action 
[{1}].  Failing this action!", action
+                            .getExternalId(), action.getId());
+                        }
 
-                    Counters taskCounters = runningJob.getCounters();
-                    if(taskCounters != null) {
-                        if(counters == null) {
-                          counters = taskCounters;
+                        Counters taskCounters = runningJob.getCounters();
+                        if(taskCounters != null) {
+                            if(counters == null) {
+                              counters = taskCounters;
+                            } else {
+                              counters.incrAllCounters(taskCounters);
+                            }
                         } else {
-                          counters.incrAllCounters(taskCounters);
+                          XLog.getLog(getClass()).warn("Could not find Hadoop 
Counters for job: [{0}]", jobId);
                         }
-                    } else {
-                      XLog.getLog(getClass()).warn("Could not find Hadoop 
Counters for job: [{0}]", jobId);
                     }
                 }
 

Modified: oozie/trunk/release-log.txt
URL: 
http://svn.apache.org/viewvc/oozie/trunk/release-log.txt?rev=1502059&r1=1502058&r2=1502059&view=diff
==============================================================================
--- oozie/trunk/release-log.txt (original)
+++ oozie/trunk/release-log.txt Wed Jul 10 23:37:01 2013
@@ -1,5 +1,6 @@
 -- Oozie 4.1.0 release (trunk - unreleased)
 
+OOZIE-1447 Sqoop actions that don't launch a map reduce job fail with an 
IllegalArgumentException (jarcec via rkanter)
 OOZIE-1440 Build fails in certain environments due to xerces OpenJPA issue 
(mackrorysd via rkanter)
 
 -- Oozie 4.0.0 release

Modified: 
oozie/trunk/sharelib/sqoop/src/test/java/org/apache/oozie/action/hadoop/TestSqoopActionExecutor.java
URL: 
http://svn.apache.org/viewvc/oozie/trunk/sharelib/sqoop/src/test/java/org/apache/oozie/action/hadoop/TestSqoopActionExecutor.java?rev=1502059&r1=1502058&r2=1502059&view=diff
==============================================================================
--- 
oozie/trunk/sharelib/sqoop/src/test/java/org/apache/oozie/action/hadoop/TestSqoopActionExecutor.java
 (original)
+++ 
oozie/trunk/sharelib/sqoop/src/test/java/org/apache/oozie/action/hadoop/TestSqoopActionExecutor.java
 Wed Jul 10 23:37:01 2013
@@ -95,6 +95,27 @@ public class TestSqoopActionExecutor ext
             "<arg>I</arg>" +
             "</sqoop>";
 
+    private static final String SQOOP_ACTION_EVAL_XML =
+            "<sqoop xmlns=\"uri:oozie:sqoop-action:0.1\">" +
+            "<job-tracker>{0}</job-tracker>" +
+            "<name-node>{1}</name-node>" +
+            "<configuration>" +
+            "<property>" +
+            "<name>oozie.sqoop.log.level</name>" +
+            "<value>INFO</value>" +
+            "</property>" +
+            "</configuration>" +
+            "<arg>eval</arg>" +
+            "<arg>--connect</arg>" +
+            "<arg>{2}</arg>" +
+            "<arg>--username</arg>" +
+            "<arg>sa</arg>" +
+            "<arg>--password</arg>" +
+            "<arg></arg>" +
+            "<arg>--verbose</arg>" +
+            "<arg>--query</arg>" +
+            "<arg>{3}</arg>" +
+            "</sqoop>";
 
     @Override
     protected void setSystemProps() throws Exception {
@@ -168,6 +189,12 @@ public class TestSqoopActionExecutor ext
                                     "dummy", "dummyValue", command);
     }
 
+    private String getActionXmlEval() {
+      String query = "select TT.I, TT.S from TT";
+      return MessageFormat.format(SQOOP_ACTION_EVAL_XML, getJobTrackerUri(), 
getNameNodeUri(),
+        getActionJdbcUri(), query);
+    }
+
     private String getActionXmlFreeFromQuery() {
         String query = "select TT.I, TT.S from TT where $CONDITIONS";
         return MessageFormat.format(SQOOP_ACTION_ARGS_XML, getJobTrackerUri(), 
getNameNodeUri(),
@@ -233,6 +260,42 @@ public class TestSqoopActionExecutor ext
         
assertTrue(outputData.getProperty(LauncherMain.HADOOP_JOBS).trim().length() > 
0);
     }
 
+    public void testSqoopEval() throws Exception {
+        createDB();
+
+        Context context = createContext(getActionXmlEval());
+        final RunningJob launcherJob = submitAction(context);
+        String launcherId = context.getAction().getExternalId();
+        waitFor(120 * 1000, new Predicate() {
+            public boolean evaluate() throws Exception {
+                return launcherJob.isComplete();
+            }
+        });
+        assertTrue(launcherJob.isSuccessful());
+
+        assertFalse(LauncherMapperHelper.hasIdSwap(launcherJob));
+
+        SqoopActionExecutor ae = new SqoopActionExecutor();
+        ae.check(context, context.getAction());
+        assertTrue(launcherId.equals(context.getAction().getExternalId()));
+        assertEquals("SUCCEEDED", context.getAction().getExternalStatus());
+        assertNotNull(context.getAction().getData());
+        assertNotNull(context.getAction().getExternalChildIDs());
+        assertEquals(0, context.getAction().getExternalChildIDs().length());
+        ae.end(context, context.getAction());
+        assertEquals(WorkflowAction.Status.OK, 
context.getAction().getStatus());
+
+        String hadoopCounters = 
context.getVar(MapReduceActionExecutor.HADOOP_COUNTERS);
+        assertNotNull(hadoopCounters);
+        assertTrue(hadoopCounters.isEmpty());
+
+        assertNotNull(context.getAction().getData());
+        Properties outputData = new Properties();
+        outputData.load(new StringReader(context.getAction().getData()));
+        assertTrue(outputData.containsKey(LauncherMain.HADOOP_JOBS));
+        assertEquals(0, 
outputData.getProperty(LauncherMain.HADOOP_JOBS).trim().length());
+    }
+
     public void testSqoopActionFreeFormQuery() throws Exception {
         createDB();
 


Reply via email to