You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by mo...@apache.org on 2013/06/14 23:29:00 UTC

svn commit: r1493254 - in /oozie/trunk: ./ core/src/main/java/org/apache/oozie/command/wf/ core/src/main/java/org/apache/oozie/executor/jpa/sla/ core/src/main/java/org/apache/oozie/service/ core/src/main/java/org/apache/oozie/servlet/ core/src/main/jav...

Author: mona
Date: Fri Jun 14 21:29:00 2013
New Revision: 1493254

URL: http://svn.apache.org/r1493254
Log:
OOZIE-1418 Fix bugs around ActionKillX not setting end time, V2SLAServlet and exception handling for event threads (mona)

Modified:
    oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionKillXCommand.java
    oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java
    oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java
    oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java
    oozie/trunk/core/src/main/java/org/apache/oozie/servlet/V2SLAServlet.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java
    oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java
    oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java
    oozie/trunk/core/src/test/java/org/apache/oozie/servlet/TestV2SLAServlet.java
    oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java
    oozie/trunk/release-log.txt

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionKillXCommand.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionKillXCommand.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionKillXCommand.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/command/wf/ActionKillXCommand.java Fri Jun 14 21:29:00 2013
@@ -130,6 +130,7 @@ public class ActionKillXCommand extends 
 
                     wfAction.resetPending();
                     wfAction.setStatus(WorkflowActionBean.Status.KILLED);
+                    wfAction.setEndTime(new Date());
 
                     updateList.add(wfAction);
                     wfJob.setLastModifiedTime(new Date());
@@ -147,6 +148,8 @@ public class ActionKillXCommand extends 
                     wfAction.setStatus(WorkflowActionBean.Status.FAILED);
                     wfAction.setErrorInfo(ex.getErrorCode().toString(),
                             "KILL COMMAND FAILED - exception while executing job kill");
+                    wfAction.setEndTime(new Date());
+
                     wfJob.setStatus(WorkflowJobBean.Status.KILLED);
                     updateList.add(wfAction);
                     wfJob.setLastModifiedTime(new Date());

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/executor/jpa/sla/SLARegistrationGetJPAExecutor.java Fri Jun 14 21:29:00 2013
@@ -17,6 +17,8 @@
  */
 package org.apache.oozie.executor.jpa.sla;
 
+import java.util.List;
+
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
 
@@ -41,18 +43,27 @@ public class SLARegistrationGetJPAExecut
         return "SLARegistrationGetJPAExecutor";
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public SLARegistrationBean execute(EntityManager em) throws JPAExecutorException {
+        List<SLARegistrationBean> regBeans;
         try {
             Query q = em.createNamedQuery("GET_SLA_REG_ALL");
             q.setParameter("id", id);
-            SLARegistrationBean slaRegBean= (SLARegistrationBean) q.getSingleResult();
-            slaRegBean.setSlaConfig(slaRegBean.getSlaConfig());
-            return slaRegBean;
+            regBeans = q.getResultList();
         }
         catch (Exception e) {
             throw new JPAExecutorException(ErrorCode.E0603, e.getMessage(), e);
         }
+        SLARegistrationBean slaRegBean;
+        if (regBeans != null && regBeans.size() > 0) {
+            slaRegBean = regBeans.get(0);
+            slaRegBean.setSlaConfig(slaRegBean.getSlaConfig());
+            return slaRegBean;
+        }
+        else {
+            throw new JPAExecutorException(ErrorCode.E0604, id);
+        }
     }
 
 }

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/service/EventHandlerService.java Fri Jun 14 21:29:00 2013
@@ -222,27 +222,39 @@ public class EventHandlerService impleme
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
-            if (!eventQueue.isEmpty()) {
-                Set<Event> work = eventQueue.pollBatch();
-                for (Event event : work) {
-                    MessageType msgType = event.getMsgType();
-                    List<?> listeners = listenerMap.get(msgType);
-                    if (listeners != null) {
-                        Iterator<?> iter = listeners.iterator();
-                        while (iter.hasNext()) {
-                            if (msgType == MessageType.JOB) {
-                                invokeJobEventListener((JobEventListener) iter.next(), (JobEvent) event);
-                            }
-                            else if (msgType == MessageType.SLA) {
-                                invokeSLAEventListener((SLAEventListener) iter.next(), (SLAEvent) event);
-                            }
-                            else {
-                                iter.next();
+            try {
+                if (!eventQueue.isEmpty()) {
+                    Set<Event> work = eventQueue.pollBatch();
+                    for (Event event : work) {
+                        MessageType msgType = event.getMsgType();
+                        List<?> listeners = listenerMap.get(msgType);
+                        if (listeners != null) {
+                            Iterator<?> iter = listeners.iterator();
+                            while (iter.hasNext()) {
+                                try {
+                                    if (msgType == MessageType.JOB) {
+                                        invokeJobEventListener((JobEventListener) iter.next(), (JobEvent) event);
+                                    }
+                                    else if (msgType == MessageType.SLA) {
+                                        invokeSLAEventListener((SLAEventListener) iter.next(), (SLAEvent) event);
+                                    }
+                                    else {
+                                        iter.next();
+                                    }
+                                }
+                                catch (Throwable error) {
+                                    XLog.getLog(EventHandlerService.class).debug("Throwable in EventWorker thread run : ",
+                                            error);
+                                }
                             }
                         }
                     }
                 }
             }
+            catch (Throwable error) {
+                XLog.getLog(EventHandlerService.class).debug("Throwable in EventWorker thread run : ",
+                        error);
+            }
         }
 
         private void invokeJobEventListener(JobEventListener jobListener, JobEvent event) {

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/servlet/SLAServlet.java Fri Jun 14 21:29:00 2013
@@ -67,7 +67,7 @@ public class SLAServlet extends JsonRest
     }
 
     public SLAServlet(String instrumentationName, ResourceInfo... resourcesInfo) {
-        super(INSTRUMENTATION_NAME, resourcesInfo);
+        super(instrumentationName, resourcesInfo);
     }
 
     /**

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/servlet/V2SLAServlet.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/servlet/V2SLAServlet.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/servlet/V2SLAServlet.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/servlet/V2SLAServlet.java Fri Jun 14 21:29:00 2013
@@ -20,8 +20,8 @@ package org.apache.oozie.servlet;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.text.ParseException;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -40,6 +40,7 @@ import org.apache.oozie.executor.jpa.sla
 import org.apache.oozie.service.JPAService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.sla.SLASummaryBean;
+import org.apache.oozie.util.DateUtils;
 import org.apache.oozie.util.XLog;
 import org.json.simple.JSONObject;
 
@@ -120,10 +121,10 @@ public class V2SLAServlet extends SLASer
                 filter.setAppName(filterList.get(OozieClient.FILTER_SLA_APPNAME).get(0));
             }
             if (filterList.containsKey(OozieClient.FILTER_SLA_NOMINAL_START)) {
-                filter.setNominalStart(new Date(Long.parseLong(filterList.get(OozieClient.FILTER_SLA_NOMINAL_START).get(0))));
+                filter.setNominalStart(DateUtils.parseDateUTC(filterList.get(OozieClient.FILTER_SLA_NOMINAL_START).get(0)));
             }
             if (filterList.containsKey(OozieClient.FILTER_SLA_NOMINAL_END)) {
-                filter.setNominalEnd(new Date(Long.parseLong(filterList.get(OozieClient.FILTER_SLA_NOMINAL_END).get(0))));
+                filter.setNominalEnd(DateUtils.parseDateUTC(filterList.get(OozieClient.FILTER_SLA_NOMINAL_END).get(0)));
             }
 
             if (filter.getAppName() == null && filter.getJobId() == null && filter.getParentId() == null) {
@@ -150,6 +151,11 @@ public class V2SLAServlet extends SLASer
             throw new XServletException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ErrorCode.E0307,
                     "Unsupported Encoding", e);
         }
+        catch (ParseException e) {
+            throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0303,
+                    filterString, e);
+        }
+
     }
 
 }

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/sla/SLAOperations.java Fri Jun 14 21:29:00 2013
@@ -163,7 +163,10 @@ public class SLAOperations {
         JPAService jpaService = Services.get().get(JPAService.class);
         SLAService slaService = Services.get().get(SLAService.class);
         try {
-            slaService.updateRegistrationEvent(jpaService.execute(new SLARegistrationGetJPAExecutor(jobId)));
+            SLARegistrationBean reg = jpaService.execute(new SLARegistrationGetJPAExecutor(jobId));
+            if (reg != null) { //handle coord rerun with different config without sla
+                slaService.updateRegistrationEvent(reg);
+            }
         }
         catch (ServiceException e) {
             throw new CommandException(ErrorCode.E1007, " id " + jobId, e.getMessage(), e);

Modified: oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java (original)
+++ oozie/trunk/core/src/main/java/org/apache/oozie/sla/service/SLAService.java Fri Jun 14 21:29:00 2013
@@ -112,7 +112,12 @@ public class SLAService implements Servi
             if (Thread.currentThread().isInterrupted()) {
                 return;
             }
-            calc.updateAllSlaStatus();
+            try {
+                calc.updateAllSlaStatus();
+            }
+            catch (Throwable error) {
+                XLog.getLog(SLAService.class).debug("Throwable in SLAWorker thread run : ", error);
+            }
         }
     }
 

Modified: oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java (original)
+++ oozie/trunk/core/src/test/java/org/apache/oozie/event/TestEventGeneration.java Fri Jun 14 21:29:00 2013
@@ -380,6 +380,7 @@ public class TestEventGeneration extends
         // Killing job
         action.setStatus(WorkflowAction.Status.KILLED);
         action.setPendingOnly();
+        action.setEndTime(null); //its already set by XTestCase add action record method above
         jpaService.execute(new WorkflowActionUpdateJPAExecutor(action));
         new ActionKillXCommand(action.getId()).call();
         action = jpaService.execute(wfActionGetCmd);
@@ -393,6 +394,8 @@ public class TestEventGeneration extends
         assertEquals(job.getUser(), event.getUser());
         assertEquals(action.getName(), event.getAppName());
         assertEquals(action.getStartTime(), event.getStartTime());
+        assertNotNull(action.getEndTime());
+        assertNotNull(event.getEndTime());
         assertEquals(action.getEndTime(), event.getEndTime());
         assertEquals(0, queue.size());
 

Modified: oozie/trunk/core/src/test/java/org/apache/oozie/servlet/TestV2SLAServlet.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/test/java/org/apache/oozie/servlet/TestV2SLAServlet.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/test/java/org/apache/oozie/servlet/TestV2SLAServlet.java (original)
+++ oozie/trunk/core/src/test/java/org/apache/oozie/servlet/TestV2SLAServlet.java Fri Jun 14 21:29:00 2013
@@ -90,16 +90,13 @@ public class TestV2SLAServlet extends Da
                 assertSLAJSONResponse(array, 2, 2, "2-", "-W", null, nominalTime2, "testapp-2", AppType.WORKFLOW_JOB,
                         currentTime);
 
-                queryParams.put(RestConstants.JOBS_FILTER_PARAM, "app_name=testapp-3;nominal_start="
-                        + DateUtils.parseDateUTC("2012-06-03T016:00Z").getTime());
+                queryParams.put(RestConstants.JOBS_FILTER_PARAM, "app_name=testapp-3;nominal_start=2012-06-03T016:00Z");
                 array = getSLAJSONResponse(queryParams);
                 // Matches 3-6 elements - 3-3-W 3-4-W 3-5-W 3-6-W
                 assertSLAJSONResponse(array, 3, 6, "3-", "-W", "2-C", nominalTime3, "testapp-3", AppType.WORKFLOW_JOB,
                         currentTime);
 
-                queryParams.put(RestConstants.JOBS_FILTER_PARAM, "parent_id=2-C;nominal_start="
-                        + DateUtils.parseDateUTC("2012-06-03T016:00Z").getTime() + ";nominal_end="
-                        + DateUtils.parseDateUTC("2012-06-03T017:00Z").getTime());
+                queryParams.put(RestConstants.JOBS_FILTER_PARAM, "parent_id=2-C;nominal_start=2012-06-03T016:00Z;nominal_end=2012-06-03T017:00Z");
                 array = getSLAJSONResponse(queryParams);
                 // Matches 3rd and 4th element - 3-3-W 3-4-W
                 assertSLAJSONResponse(array, 3, 4, "3-", "-W", "2-C", nominalTime3, "testapp-3", AppType.WORKFLOW_JOB,

Modified: oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java
URL: http://svn.apache.org/viewvc/oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java (original)
+++ oozie/trunk/core/src/test/java/org/apache/oozie/sla/TestSLAEventGeneration.java Fri Jun 14 21:29:00 2013
@@ -26,15 +26,20 @@ import org.apache.hadoop.conf.Configurat
 import org.apache.hadoop.fs.Path;
 import org.apache.oozie.AppType;
 import org.apache.oozie.CoordinatorActionBean;
+import org.apache.oozie.CoordinatorJobBean;
+import org.apache.oozie.ErrorCode;
 import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.client.CoordinatorAction;
+import org.apache.oozie.client.CoordinatorJob;
 import org.apache.oozie.client.OozieClient;
 import org.apache.oozie.client.WorkflowJob;
 import org.apache.oozie.client.event.SLAEvent.SLAStatus;
 import org.apache.oozie.client.event.SLAEvent.EventStatus;
+import org.apache.oozie.client.rest.RestConstants;
 import org.apache.oozie.command.CommandException;
 import org.apache.oozie.command.coord.CoordActionStartXCommand;
 import org.apache.oozie.command.coord.CoordKillXCommand;
+import org.apache.oozie.command.coord.CoordRerunXCommand;
 import org.apache.oozie.command.coord.CoordSubmitXCommand;
 import org.apache.oozie.command.wf.KillXCommand;
 import org.apache.oozie.command.wf.ReRunXCommand;
@@ -282,6 +287,27 @@ public class TestSLAEventGeneration exte
 
     }
 
+    /**
+     * Test coord rerun with no SLA config works as before
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testCoordRerunNoSLA() throws Exception {
+        CoordinatorJobBean job = this.addRecordToCoordJobTable(CoordinatorJob.Status.SUCCEEDED, false, false);
+        addRecordToCoordActionTable(job.getId(), 1, CoordinatorAction.Status.FAILED, "coord-rerun-action1.xml", 0);
+
+        try {
+            new CoordRerunXCommand(job.getId(), RestConstants.JOB_COORD_RERUN_DATE, "2009-12-15T01:00Z", false, true)
+                    .call();
+        }
+        catch (CommandException ce) {
+            if (ce.getErrorCode() == ErrorCode.E0603) {
+                fail("Coord Rerun with no SLA should not throw 'no job found error' from SLA Summary table");
+            }
+        }
+    }
+
     @Test
     public void testSLASchema1BackwardCompatibility() throws Exception {
         EventHandlerService ehs = services.get(EventHandlerService.class);

Modified: oozie/trunk/release-log.txt
URL: http://svn.apache.org/viewvc/oozie/trunk/release-log.txt?rev=1493254&r1=1493253&r2=1493254&view=diff
==============================================================================
--- oozie/trunk/release-log.txt (original)
+++ oozie/trunk/release-log.txt Fri Jun 14 21:29:00 2013
@@ -1,5 +1,6 @@
 -- Oozie 4.1.0 release (trunk - unreleased)
 
+OOZIE-1418 Fix bugs around ActionKillX not setting end time, V2SLAServlet and exception handling for event threads (mona)
 OOZIE-1365 The hive action popup in the web UI is broken when externalChildIDs is empty string (michalisk via rkanter)
 OOZIE-1412 Webapp contains all sharedlib dependencies after launcher refactor (rohini)
 OOZIE-1414 Configuring Oozie for HTTPS still allows HTTP connections to all resources (rkanter)