Repository: oozie
Updated Branches:
  refs/heads/master 6be29c61f -> 326a58347


OOZIE-2328 Coordinator endtime change should check if the last action is in 
database


Project: http://git-wip-us.apache.org/repos/asf/oozie/repo
Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/326a5834
Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/326a5834
Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/326a5834

Branch: refs/heads/master
Commit: 326a58347acaba0772c83b2da7d2d5dec785c396
Parents: 6be29c6
Author: Purshotam Shah <[email protected]>
Authored: Thu Oct 29 15:51:05 2015 -0700
Committer: Purshotam Shah <[email protected]>
Committed: Thu Oct 29 15:51:05 2015 -0700

----------------------------------------------------------------------
 .../command/coord/CoordChangeXCommand.java      | 41 +++++++++--------
 .../executor/jpa/BundleActionQueryExecutor.java | 25 +++++++----
 .../executor/jpa/BundleJobQueryExecutor.java    | 12 ++++-
 .../executor/jpa/CoordActionQueryExecutor.java  | 12 ++++-
 .../executor/jpa/CoordJobQueryExecutor.java     | 24 +++++++---
 .../oozie/executor/jpa/QueryExecutor.java       |  3 ++
 .../jpa/SLARegistrationQueryExecutor.java       | 13 ++++++
 .../executor/jpa/SLASummaryQueryExecutor.java   | 13 ++++++
 .../jpa/WorkflowActionQueryExecutor.java        | 12 ++++-
 .../executor/jpa/WorkflowJobQueryExecutor.java  | 26 ++++++++---
 .../command/coord/TestCoordChangeXCommand.java  | 47 ++++++++++++++++++++
 release-log.txt                                 |  1 +
 12 files changed, 185 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/command/coord/CoordChangeXCommand.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/command/coord/CoordChangeXCommand.java 
b/core/src/main/java/org/apache/oozie/command/coord/CoordChangeXCommand.java
index d060859..e65b74f 100644
--- a/core/src/main/java/org/apache/oozie/command/coord/CoordChangeXCommand.java
+++ b/core/src/main/java/org/apache/oozie/command/coord/CoordChangeXCommand.java
@@ -41,8 +41,7 @@ import org.apache.oozie.command.PreconditionException;
 import org.apache.oozie.command.bundle.BundleStatusUpdateXCommand;
 import org.apache.oozie.executor.jpa.BatchQueryExecutor;
 import org.apache.oozie.executor.jpa.BatchQueryExecutor.UpdateEntry;
-import org.apache.oozie.executor.jpa.CoordActionGetJPAExecutor;
-import 
org.apache.oozie.executor.jpa.CoordJobGetActionByActionNumberJPAExecutor;
+import org.apache.oozie.executor.jpa.CoordActionQueryExecutor;
 import org.apache.oozie.executor.jpa.CoordJobGetJPAExecutor;
 import org.apache.oozie.executor.jpa.CoordJobQueryExecutor.CoordJobQuery;
 import org.apache.oozie.executor.jpa.JPAExecutorException;
@@ -269,26 +268,30 @@ public class CoordChangeXCommand extends 
CoordinatorXCommand<Void> {
                 return null;
             }
 
-            String actionId = jpaService.execute(new 
CoordJobGetActionByActionNumberJPAExecutor(jobId, actionNum));
-            CoordinatorActionBean bean = jpaService.execute(new 
CoordActionGetJPAExecutor(actionId));
+            String actionId = jobId + "@" + actionNum;
+            CoordinatorActionBean bean = 
CoordActionQueryExecutor.getInstance().getIfExist(
+                    
CoordActionQueryExecutor.CoordActionQuery.GET_COORD_ACTION, actionId);
+            if (bean == null) {
+                return null;
+            }
             if (afterDate.compareTo(bean.getNominalTime()) <= 0) {
-                // delete SLA registration entry (if any) for action
-                if (SLAService.isEnabled()) {
-                    
Services.get().get(SLAService.class).removeRegistration(actionId);
-                }
-                SLARegistrationBean slaReg = 
SLARegistrationQueryExecutor.getInstance().get(SLARegQuery.GET_SLA_REG_ALL, 
actionId);
-                if (slaReg != null) {
-                    LOG.debug("Deleting registration bean corresponding to 
action " + slaReg.getId());
-                    deleteList.add(slaReg);
-                }
-                SLASummaryBean slaSummaryBean = 
SLASummaryQueryExecutor.getInstance().get(
-                        SLASummaryQuery.GET_SLA_SUMMARY, actionId);
-                if (slaSummaryBean != null) {
-                    LOG.debug("Deleting summary bean corresponding to action " 
+ slaSummaryBean.getId());
-                    deleteList.add(slaSummaryBean);
-                }
                 if (bean.getStatus() == CoordinatorAction.Status.WAITING
                         || bean.getStatus() == CoordinatorAction.Status.READY) 
{
+                    // delete SLA registration entry (if any) for action
+                    if (SLAService.isEnabled()) {
+                        
Services.get().get(SLAService.class).removeRegistration(actionId);
+                    }
+                    SLARegistrationBean slaReg = 
SLARegistrationQueryExecutor.getInstance().get(SLARegQuery.GET_SLA_REG_ALL, 
actionId);
+                    if (slaReg != null) {
+                        LOG.debug("Deleting registration bean corresponding to 
action " + slaReg.getId());
+                        deleteList.add(slaReg);
+                    }
+                    SLASummaryBean slaSummaryBean = 
SLASummaryQueryExecutor.getInstance().get(
+                            SLASummaryQuery.GET_SLA_SUMMARY, actionId);
+                    if (slaSummaryBean != null) {
+                        LOG.debug("Deleting summary bean corresponding to 
action " + slaSummaryBean.getId());
+                        deleteList.add(slaSummaryBean);
+                    }
                     deleteList.add(bean);
                 }
                 else {

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/BundleActionQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/BundleActionQueryExecutor.java
 
b/core/src/main/java/org/apache/oozie/executor/jpa/BundleActionQueryExecutor.java
index 704da87..bc3742d 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/BundleActionQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/BundleActionQueryExecutor.java
@@ -20,7 +20,6 @@ package org.apache.oozie.executor.jpa;
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 import javax.persistence.EntityManager;
@@ -123,14 +122,11 @@ public class BundleActionQueryExecutor extends
 
     @Override
     public BundleActionBean get(BundleActionQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
-        JPAService jpaService = Services.get().get(JPAService.class);
-        EntityManager em = jpaService.getEntityManager();
-        Query query = getSelectQuery(namedQuery, em, parameters);
-        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
-        if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0604, query.toString());
+        BundleActionBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0604, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters));
         }
-        BundleActionBean bean = constructBean(namedQuery, ret);
         return bean;
     }
 
@@ -186,4 +182,17 @@ public class BundleActionQueryExecutor extends
         throw new UnsupportedOperationException();
     }
 
+    @Override
+    public BundleActionBean getIfExist(BundleActionQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        JPAService jpaService = Services.get().get(JPAService.class);
+        EntityManager em = jpaService.getEntityManager();
+        Query query = getSelectQuery(namedQuery, em, parameters);
+        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
+        if (ret == null) {
+            return null;
+        }
+        BundleActionBean bean = constructBean(namedQuery, ret);
+        return bean;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/BundleJobQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/BundleJobQueryExecutor.java 
b/core/src/main/java/org/apache/oozie/executor/jpa/BundleJobQueryExecutor.java
index e07672b..bfd1dae 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/BundleJobQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/BundleJobQueryExecutor.java
@@ -157,12 +157,22 @@ public class BundleJobQueryExecutor extends 
QueryExecutor<BundleJobBean, BundleJ
 
     @Override
     public BundleJobBean get(BundleJobQuery namedQuery, Object... parameters) 
throws JPAExecutorException {
+        BundleJobBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0605, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters).toString());
+        }
+        return bean;
+    }
+
+    @Override
+    public BundleJobBean getIfExist(BundleJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();
         Query query = getSelectQuery(namedQuery, em, parameters);
         Object ret = jpaService.executeGet(namedQuery.name(), query, em);
         if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0604, query.toString());
+            return null;
         }
         BundleJobBean bean = constructBean(namedQuery, ret, parameters);
         return bean;

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/CoordActionQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/CoordActionQueryExecutor.java
 
b/core/src/main/java/org/apache/oozie/executor/jpa/CoordActionQueryExecutor.java
index 6c7f4be..79ec28c 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/CoordActionQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/CoordActionQueryExecutor.java
@@ -227,12 +227,22 @@ public class CoordActionQueryExecutor extends
 
     @Override
     public CoordinatorActionBean get(CoordActionQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        CoordinatorActionBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0605, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters).toString());
+        }
+        return bean;
+    }
+
+    @Override
+    public CoordinatorActionBean getIfExist(CoordActionQuery namedQuery, 
Object... parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();
         Query query = getSelectQuery(namedQuery, em, parameters);
         Object ret = jpaService.executeGet(namedQuery.name(), query, em);
         if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0605, query.toString());
+            return null;
         }
         CoordinatorActionBean bean = constructBean(namedQuery, ret);
         return bean;

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobQueryExecutor.java 
b/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobQueryExecutor.java
index 1518686..45d2fc9 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/CoordJobQueryExecutor.java
@@ -399,14 +399,11 @@ public class CoordJobQueryExecutor extends 
QueryExecutor<CoordinatorJobBean, Coo
 
     @Override
     public CoordinatorJobBean get(CoordJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
-        JPAService jpaService = Services.get().get(JPAService.class);
-        EntityManager em = jpaService.getEntityManager();
-        Query query = getSelectQuery(namedQuery, em, parameters);
-        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
-        if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0604, query.toString());
+        CoordinatorJobBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0605, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters).toString());
         }
-        CoordinatorJobBean bean = constructBean(namedQuery, ret, parameters);
         return bean;
     }
 
@@ -429,4 +426,17 @@ public class CoordJobQueryExecutor extends 
QueryExecutor<CoordinatorJobBean, Coo
     public Object getSingleValue(CoordJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
         throw new UnsupportedOperationException();
     }
+
+    @Override
+    public CoordinatorJobBean getIfExist(CoordJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        JPAService jpaService = Services.get().get(JPAService.class);
+        EntityManager em = jpaService.getEntityManager();
+        Query query = getSelectQuery(namedQuery, em, parameters);
+        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
+        if (ret == null) {
+            return null;
+        }
+        CoordinatorJobBean bean = constructBean(namedQuery, ret, parameters);
+        return bean;
+    }
 }

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/QueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/QueryExecutor.java 
b/core/src/main/java/org/apache/oozie/executor/jpa/QueryExecutor.java
index 8c9d127..8d94c23 100644
--- a/core/src/main/java/org/apache/oozie/executor/jpa/QueryExecutor.java
+++ b/core/src/main/java/org/apache/oozie/executor/jpa/QueryExecutor.java
@@ -19,6 +19,7 @@
 package org.apache.oozie.executor.jpa;
 
 import java.util.List;
+
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceException;
 import javax.persistence.Query;
@@ -76,4 +77,6 @@ public abstract class QueryExecutor<T, E extends Enum<E>> {
     public abstract Object getSingleValue(E namedQuery, Object... parameters)
             throws JPAExecutorException;
 
+    public abstract T getIfExist(E namedQuery, Object... parameters) throws 
JPAExecutorException;
+
 }

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/SLARegistrationQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/SLARegistrationQueryExecutor.java
 
b/core/src/main/java/org/apache/oozie/executor/jpa/SLARegistrationQueryExecutor.java
index bded634..446858f 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/SLARegistrationQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/SLARegistrationQueryExecutor.java
@@ -144,6 +144,19 @@ public class SLARegistrationQueryExecutor extends 
QueryExecutor<SLARegistrationB
     }
 
     @Override
+    public SLARegistrationBean getIfExist(SLARegQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        JPAService jpaService = Services.get().get(JPAService.class);
+        EntityManager em = jpaService.getEntityManager();
+        Query query = getSelectQuery(namedQuery, em, parameters);
+        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
+        if (ret == null && !namedQuery.equals(SLARegQuery.GET_SLA_REG_ALL)) {
+            return null;
+        }
+        SLARegistrationBean bean = constructBean(namedQuery, ret, parameters);
+        return bean;
+    }
+
+    @Override
     public List<SLARegistrationBean> getList(SLARegQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/SLASummaryQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/SLASummaryQueryExecutor.java 
b/core/src/main/java/org/apache/oozie/executor/jpa/SLASummaryQueryExecutor.java
index 0057c89..6663162 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/SLASummaryQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/SLASummaryQueryExecutor.java
@@ -161,6 +161,19 @@ public class SLASummaryQueryExecutor extends 
QueryExecutor<SLASummaryBean, SLASu
     }
 
     @Override
+    public SLASummaryBean getIfExist(SLASummaryQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        JPAService jpaService = Services.get().get(JPAService.class);
+        EntityManager em = jpaService.getEntityManager();
+        Query query = getSelectQuery(namedQuery, em, parameters);
+        Object ret = jpaService.executeGet(namedQuery.name(), query, em);
+        if (ret == null && 
!namedQuery.equals(SLASummaryQuery.GET_SLA_SUMMARY)) {
+            return null;
+        }
+        SLASummaryBean bean = constructBean(namedQuery, ret, parameters);
+        return bean;
+    }
+
+    @Override
     public List<SLASummaryBean> getList(SLASummaryQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowActionQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowActionQueryExecutor.java
 
b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowActionQueryExecutor.java
index 76f9adc..078fd40 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowActionQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowActionQueryExecutor.java
@@ -372,12 +372,22 @@ public class WorkflowActionQueryExecutor extends
 
     @Override
     public WorkflowActionBean get(WorkflowActionQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        WorkflowActionBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0605, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters).toString());
+        }
+        return bean;
+    }
+
+    @Override
+    public WorkflowActionBean getIfExist(WorkflowActionQuery namedQuery, 
Object... parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();
         Query query = getSelectQuery(namedQuery, em, parameters);
         Object ret = jpaService.executeGet(namedQuery.name(), query, em);
         if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0605, query.toString());
+            return null;
         }
         WorkflowActionBean bean = constructBean(namedQuery, ret);
         return bean;

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobQueryExecutor.java
 
b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobQueryExecutor.java
index 1acab4a..ce108d5 100644
--- 
a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobQueryExecutor.java
+++ 
b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobQueryExecutor.java
@@ -18,20 +18,22 @@
 
 package org.apache.oozie.executor.jpa;
 
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
 import org.apache.oozie.BinaryBlob;
 import org.apache.oozie.ErrorCode;
 import org.apache.oozie.StringBlob;
+import org.apache.oozie.WorkflowActionBean;
 import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.service.JPAService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.util.DateUtils;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Query Executor that provides API to run query for Workflow Job
  */
@@ -337,12 +339,22 @@ public class WorkflowJobQueryExecutor extends 
QueryExecutor<WorkflowJobBean, Wor
 
     @Override
     public WorkflowJobBean get(WorkflowJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
+        WorkflowJobBean bean = getIfExist(namedQuery, parameters);
+        if (bean == null) {
+            throw new JPAExecutorException(ErrorCode.E0605, 
getSelectQuery(namedQuery,
+                    Services.get().get(JPAService.class).getEntityManager(), 
parameters).toString());
+        }
+        return bean;
+    }
+
+    @Override
+    public WorkflowJobBean getIfExist(WorkflowJobQuery namedQuery, Object... 
parameters) throws JPAExecutorException {
         JPAService jpaService = Services.get().get(JPAService.class);
         EntityManager em = jpaService.getEntityManager();
         Query query = getSelectQuery(namedQuery, em, parameters);
         Object ret = jpaService.executeGet(namedQuery.name(), query, em);
         if (ret == null) {
-            throw new JPAExecutorException(ErrorCode.E0604, query.toString());
+            return null;
         }
         WorkflowJobBean bean = constructBean(namedQuery, ret, parameters);
         return bean;

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/core/src/test/java/org/apache/oozie/command/coord/TestCoordChangeXCommand.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/oozie/command/coord/TestCoordChangeXCommand.java
 
b/core/src/test/java/org/apache/oozie/command/coord/TestCoordChangeXCommand.java
index 3a91aa5..5635c0a 100644
--- 
a/core/src/test/java/org/apache/oozie/command/coord/TestCoordChangeXCommand.java
+++ 
b/core/src/test/java/org/apache/oozie/command/coord/TestCoordChangeXCommand.java
@@ -388,6 +388,53 @@ public class TestCoordChangeXCommand extends XDataTestCase 
{
         assertTrue(coordJob.isDoneMaterialization());
     }
 
+    /**
+     * Testcase when no actions are added to coord action table
+     * reflects correct job state and values
+     *
+     * @throws Exception
+     */
+    public void testCoordChangeEndTime4() throws Exception {
+        JPAService jpaService = Services.get().get(JPAService.class);
+
+        Date startTime = new Date();
+        Date endTime = new Date(startTime.getTime() + (50 * 60 * 1000));
+        CoordinatorJobBean coordJob = 
addRecordToCoordJobTable(CoordinatorJob.Status.RUNNING, startTime, endTime, 
true, true, 1);
+        coordJob.setNextMaterializedTime(new Date(startTime.getTime() + (30 * 
60 * 1000)));
+        
CoordJobQueryExecutor.getInstance().executeUpdate(CoordJobQuery.UPDATE_COORD_JOB,
 coordJob);
+
+        Runnable runnable = new StatusTransitService.StatusTransitRunnable();
+        runnable.run(); // dummy run so we get to the interval check following 
coord job change
+        sleep(1000);
+
+        assertEquals(endTime.getTime(), coordJob.getEndTime().getTime()); // 
checking before change
+
+        String newEndTime = convertDateToString(startTime.getTime() + 30 * 60 
* 1000);
+
+        new CoordChangeXCommand(coordJob.getId(), "endtime=" + 
newEndTime).call();
+        try {
+            checkCoordJobs(coordJob.getId(), 
DateUtils.parseDateOozieTZ(newEndTime), null, null, false);
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+            fail("Invalid date" + ex);
+        }
+
+        CoordJobGetJPAExecutor coordGetCmd = new 
CoordJobGetJPAExecutor(coordJob.getId());
+        coordJob = jpaService.execute(coordGetCmd);
+        assertEquals(Job.Status.RUNNING, coordJob.getStatus());
+        assertEquals(newEndTime, 
convertDateToString(coordJob.getEndTime().getTime())); // checking after change
+        assertTrue(coordJob.isPending());
+        assertTrue(coordJob.isDoneMaterialization());
+
+        runnable.run();
+        sleep(1000);
+        coordJob = jpaService.execute(coordGetCmd);
+        assertEquals(Job.Status.SUCCEEDED, coordJob.getStatus());
+        assertFalse(coordJob.isPending());
+        assertTrue(coordJob.isDoneMaterialization());
+    }
+
     // Testcase to test deletion of lookahead action in case of end-date change
     public void testCoordChangeEndTimeDeleteAction() throws Exception {
         Date startTime = DateUtils.parseDateOozieTZ("2013-08-01T00:00Z");

http://git-wip-us.apache.org/repos/asf/oozie/blob/326a5834/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index ee46b29..9dbcd1d 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 4.3.0 release (trunk - unreleased)
 
+OOZIE-2328 Coordinator endtime change should check if the last action is in 
database (kailongs via puru) 
 OOZIE-2367 fs delete should support skipTrash option (jaydeepvishwakarma via 
rohini)
 OOZIE-2368 coord:dateOffset and coord:dateTzOffset can't be used for coord 
initial-instance (puru)
 OOZIE-2369 coord:offset doesn't resolve correctly (puru)

Reply via email to