You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by as...@apache.org on 2018/01/17 08:39:33 UTC
oozie git commit: OOZIE-1401 amend PurgeCommand should purge the
workflow jobs w/o end_time (andras.piros, asasvari)
Repository: oozie
Updated Branches:
refs/heads/master 9491db0b8 -> 5fe2d4dfc
OOZIE-1401 amend PurgeCommand should purge the workflow jobs w/o end_time (andras.piros, asasvari)
Project: http://git-wip-us.apache.org/repos/asf/oozie/repo
Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/5fe2d4df
Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/5fe2d4df
Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/5fe2d4df
Branch: refs/heads/master
Commit: 5fe2d4dfce1f66f4678198b8ae1d6ef2bcf10d4e
Parents: 9491db0
Author: Attila Sasvari <as...@cloudera.com>
Authored: Wed Jan 17 09:24:19 2018 +0100
Committer: Attila Sasvari <as...@cloudera.com>
Committed: Wed Jan 17 09:24:19 2018 +0100
----------------------------------------------------------------------
.../java/org/apache/oozie/WorkflowJobBean.java | 4 +-
...bsBasicInfoFromCoordParentIdJPAExecutor.java | 35 +---
.../jpa/WorkflowJobsBasicInfoFromParentId.java | 73 +++++++
...asicInfoFromWorkflowParentIdJPAExecutor.java | 37 +---
.../apache/oozie/command/TestPurgeXCommand.java | 208 ++++++++++++++++---
release-log.txt | 1 +
6 files changed, 261 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/core/src/main/java/org/apache/oozie/WorkflowJobBean.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/WorkflowJobBean.java b/core/src/main/java/org/apache/oozie/WorkflowJobBean.java
index 028164d..cd9a6df 100644
--- a/core/src/main/java/org/apache/oozie/WorkflowJobBean.java
+++ b/core/src/main/java/org/apache/oozie/WorkflowJobBean.java
@@ -119,9 +119,9 @@ import java.util.List;
@NamedQuery(name = "GET_WORKFLOWS_WITH_COORD_PARENT_ID", query = "select w.id from WorkflowJobBean w where w.parentId like :parentId"), // when setting parentId parameter, make sure to append a '%' (percent symbol) at the end (e.g. 0000004-130709155224435-oozie-rkan-C%")
- @NamedQuery(name = "GET_WORKFLOWS_BASIC_INFO_BY_PARENT_ID", query = "select w.id, w.statusStr, w.endTimestamp from WorkflowJobBean w where w.parentId = :parentId"),
+ @NamedQuery(name = "GET_WORKFLOWS_BASIC_INFO_BY_PARENT_ID", query = "select w.id, w.statusStr, w.endTimestamp, w.lastModifiedTimestamp from WorkflowJobBean w where w.parentId = :parentId"),
- @NamedQuery(name = "GET_WORKFLOWS_BASIC_INFO_BY_COORD_PARENT_ID", query = "select w.id, w.statusStr, w.endTimestamp from WorkflowJobBean w where w.parentId like :parentId"),
+ @NamedQuery(name = "GET_WORKFLOWS_BASIC_INFO_BY_COORD_PARENT_ID", query = "select w.id, w.statusStr, w.endTimestamp, w.lastModifiedTimestamp from WorkflowJobBean w where w.parentId like :parentId"),
@NamedQuery(name = "GET_WORKFLOW_FOR_USER", query = "select w.user from WorkflowJobBean w where w.id = :id"),
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor.java b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor.java
index 2e1ab5f..f2c2c02 100644
--- a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor.java
+++ b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor.java
@@ -20,28 +20,20 @@ package org.apache.oozie.executor.jpa;
import org.apache.oozie.ErrorCode;
import org.apache.oozie.WorkflowJobBean;
-import org.apache.oozie.client.WorkflowJob;
-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;
-public class WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor implements JPAExecutor<List<WorkflowJobBean>> {
- private String parentId;
- private int limit;
- private int offset;
-
+public class WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor extends WorkflowJobsBasicInfoFromParentId
+ implements JPAExecutor<List<WorkflowJobBean>>
+{
public WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor(String parentId, int limit) {
this(parentId, 0, limit);
}
public WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor(String parentId, int offset, int limit) {
- this.parentId = parentId;
- this.offset = offset;
- this.limit = limit;
+ super(parentId, offset, limit);
}
@Override
@@ -63,23 +55,4 @@ public class WorkflowJobsBasicInfoFromCoordParentIdJPAExecutor implements JPAEx
throw new JPAExecutorException(ErrorCode.E0603, e.getMessage(), e);
}
}
-
- private List<WorkflowJobBean> getBeanFromArray(List resultList) {
- List<WorkflowJobBean> wfActionBeanList = new ArrayList<WorkflowJobBean>();
- for (Object element : resultList) {
- WorkflowJobBean wfBean = new WorkflowJobBean();
- Object[] arr = (Object[])element;
- if(arr[0] != null) {
- wfBean.setId((String) arr[0]);
- }
- if(arr[1] != null) {
- wfBean.setStatus(WorkflowJob.Status.valueOf((String) arr[1]));
- }
- if(arr[2] != null) {
- wfBean.setEndTime(DateUtils.toDate((Timestamp) arr[2]));
- }
- wfActionBeanList.add(wfBean);
- }
- return wfActionBeanList;
- }
}
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromParentId.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromParentId.java b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromParentId.java
new file mode 100644
index 0000000..4b8adfb
--- /dev/null
+++ b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromParentId.java
@@ -0,0 +1,73 @@
+/**
+ * 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.oozie.executor.jpa;
+
+import org.apache.oozie.WorkflowJobBean;
+import org.apache.oozie.client.WorkflowJob;
+import org.apache.oozie.util.DateUtils;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class WorkflowJobsBasicInfoFromParentId {
+ protected final String parentId;
+ protected final int limit;
+ protected final int offset;
+
+ WorkflowJobsBasicInfoFromParentId(final String parentId, final int offset, final int limit) {
+ this.parentId = parentId;
+ this.offset = offset;
+ this.limit = limit;
+ }
+
+ List<WorkflowJobBean> getBeanFromArray(final List resultList) {
+ final List<WorkflowJobBean> wfActionBeanList = new ArrayList<>();
+
+ for (final Object element : resultList) {
+ final WorkflowJobBean wfBean = new WorkflowJobBean();
+ final Object[] arr = (Object[])element;
+
+ final String id = (String) arr[0];
+ if (id != null) {
+ wfBean.setId(id);
+ }
+
+ final String status = (String) arr[1];
+ if (status != null) {
+ wfBean.setStatus(WorkflowJob.Status.valueOf(status));
+ }
+
+ final Timestamp endTime = (Timestamp) arr[2];
+ if (endTime != null) {
+ wfBean.setEndTime(DateUtils.toDate(endTime));
+ }
+
+ final Timestamp lastModifiedTime = (Timestamp) arr[3];
+ if (lastModifiedTime != null) {
+ final Date d = DateUtils.toDate(lastModifiedTime);
+ wfBean.setLastModifiedTime(d);
+ }
+ wfActionBeanList.add(wfBean);
+ }
+
+ return wfActionBeanList;
+ }
+}
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor.java b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor.java
index 8205334..f582647 100644
--- a/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor.java
+++ b/core/src/main/java/org/apache/oozie/executor/jpa/WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor.java
@@ -20,29 +20,20 @@ package org.apache.oozie.executor.jpa;
import org.apache.oozie.ErrorCode;
import org.apache.oozie.WorkflowJobBean;
-import org.apache.oozie.client.WorkflowJob;
-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;
-public class WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor implements JPAExecutor<List<WorkflowJobBean>> {
-
- private String parentId;
- private int limit;
- private int offset;
-
+public class WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor extends WorkflowJobsBasicInfoFromParentId
+ implements JPAExecutor<List<WorkflowJobBean>>
+{
public WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor(String parentId, int limit) {
this(parentId, 0, limit);
}
public WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor(String parentId, int offset, int limit) {
- this.parentId = parentId;
- this.offset = offset;
- this.limit = limit;
+ super(parentId, offset, limit);
}
@Override
@@ -64,24 +55,4 @@ public class WorkflowJobsBasicInfoFromWorkflowParentIdJPAExecutor implements JPA
throw new JPAExecutorException(ErrorCode.E0603, e.getMessage(), e);
}
}
-
- private List<WorkflowJobBean> getBeanFromArray(List resultList) {
- List<WorkflowJobBean> wfActionBeanList = new ArrayList<WorkflowJobBean>();
- for (Object element : resultList) {
- WorkflowJobBean wfBean = new WorkflowJobBean();
- Object[] arr = (Object[])element;
- if(arr[0] != null) {
- wfBean.setId((String) arr[0]);
- }
- if(arr[1] != null) {
- wfBean.setStatus(WorkflowJob.Status.valueOf((String) arr[1]));
- }
- if(arr[2] != null) {
- wfBean.setEndTime(DateUtils.toDate((Timestamp) arr[2]));
- }
- wfActionBeanList.add(wfBean);
- }
-
- return wfActionBeanList;
- }
}
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/core/src/test/java/org/apache/oozie/command/TestPurgeXCommand.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/oozie/command/TestPurgeXCommand.java b/core/src/test/java/org/apache/oozie/command/TestPurgeXCommand.java
index af9591b..d11fcff 100644
--- a/core/src/test/java/org/apache/oozie/command/TestPurgeXCommand.java
+++ b/core/src/test/java/org/apache/oozie/command/TestPurgeXCommand.java
@@ -42,12 +42,13 @@ import org.apache.oozie.executor.jpa.CoordActionGetJPAExecutor;
import org.apache.oozie.executor.jpa.CoordJobGetJPAExecutor;
import org.apache.oozie.executor.jpa.CoordJobInsertJPAExecutor;
import org.apache.oozie.executor.jpa.CoordJobQueryExecutor;
-import org.apache.oozie.executor.jpa.WorkflowJobQueryExecutor;
import org.apache.oozie.executor.jpa.CoordJobQueryExecutor.CoordJobQuery;
import org.apache.oozie.executor.jpa.JPAExecutorException;
+import org.apache.oozie.executor.jpa.QueryExecutor;
import org.apache.oozie.executor.jpa.WorkflowActionGetJPAExecutor;
import org.apache.oozie.executor.jpa.WorkflowJobGetJPAExecutor;
import org.apache.oozie.executor.jpa.WorkflowJobInsertJPAExecutor;
+import org.apache.oozie.executor.jpa.WorkflowJobQueryExecutor;
import org.apache.oozie.executor.jpa.WorkflowJobQueryExecutor.WorkflowJobQuery;
import org.apache.oozie.service.JPAService;
import org.apache.oozie.service.LiteWorkflowStoreService;
@@ -174,30 +175,6 @@ public class TestPurgeXCommand extends XDataTestCase {
}
/**
- * Test : purge failed wf job with null end_time successfully
- *
- * @throws Exception
- */
- public void testFailedJobNullEndTimePurgeXCommand() throws Exception {
- final WorkflowJobBean job = this.addRecordToWfJobTable(WorkflowJob.Status.FAILED, WorkflowInstance.Status.FAILED);
- final Date endTime = job.getEndTime();
- job.setLastModifiedTime(endTime);
- job.setEndTime(null);
-
- final JPAService jpaService = Services.get().get(JPAService.class);
- final WorkflowJobGetJPAExecutor wfJobGetCmd = new WorkflowJobGetJPAExecutor(job.getId());
-
- new PurgeXCommand(7, 1, 1, 10).call();
-
- try {
- jpaService.execute(wfJobGetCmd);
- fail("Workflow Job should have been purged");
- } catch (JPAExecutorException je) {
- assertEquals(ErrorCode.E0604, je.getErrorCode());
- }
- }
-
- /**
* Test : purge killed wf job and action successfully
*
* @throws Exception
@@ -2882,6 +2859,66 @@ public class TestPurgeXCommand extends XDataTestCase {
}
/**
+ * Test : The subworkflow should get purged, and the workflow parent should get purged --> both will get purged
+ * Subworkflow has terminated, last modified time is known, but end time is null
+ *
+ * @throws Exception
+ */
+ public void testPurgeWFWithEndedSubWFWithNullEndTimeValidLastModifiedTime() throws Exception {
+ final JPAService jpaService = Services.get().get(JPAService.class);
+ assertNotNull(jpaService);
+
+ WorkflowJobBean wfJob = addRecordToWfJobTable(WorkflowJob.Status.SUCCEEDED, WorkflowInstance.Status.SUCCEEDED);
+ WorkflowActionBean wfAction1 = addRecordToWfActionTable(wfJob.getId(), "1", WorkflowAction.Status.OK);
+
+ WorkflowJobBean subwfJob1 = addRecordToWfJobTable(WorkflowJob.Status.SUCCEEDED, WorkflowInstance.Status.SUCCEEDED,
+ wfJob.getId());
+ subwfJob1.setEndTime(null);
+ WorkflowActionBean subwfAction1 = addRecordToWfActionTable(subwfJob1.getId(), "1", WorkflowAction.Status.OK);
+
+ final WorkflowJobGetJPAExecutor wfJobGetCmd = new WorkflowJobGetJPAExecutor(wfJob.getId());
+ final WorkflowActionGetJPAExecutor wfAction1GetCmd = new WorkflowActionGetJPAExecutor(wfAction1.getId());
+ final WorkflowJobGetJPAExecutor subwfJob1GetCmd = new WorkflowJobGetJPAExecutor(subwfJob1.getId());
+ final WorkflowActionGetJPAExecutor subwfAction1GetCmd = new WorkflowActionGetJPAExecutor(subwfAction1.getId());
+
+ wfJob = jpaService.execute(wfJobGetCmd);
+ wfAction1 = jpaService.execute(wfAction1GetCmd);
+ subwfJob1 = jpaService.execute(subwfJob1GetCmd);
+ subwfAction1 = jpaService.execute(subwfAction1GetCmd);
+
+ assertEquals(WorkflowJob.Status.SUCCEEDED, wfJob.getStatus());
+ assertEquals(WorkflowAction.Status.OK, wfAction1.getStatus());
+ assertEquals(WorkflowJob.Status.SUCCEEDED, subwfJob1.getStatus());
+ assertEquals(WorkflowAction.Status.OK, subwfAction1.getStatus());
+
+ final QueryExecutor<WorkflowJobBean, WorkflowJobQueryExecutor.WorkflowJobQuery> workflowJobQueryExecutor =
+ WorkflowJobQueryExecutor.getInstance();
+ workflowJobQueryExecutor.executeUpdate(WorkflowJobQuery.UPDATE_WORKFLOW, subwfJob1);
+
+ final int wfOlderThanDays = 7;
+ final int coordOlderThanDays = 1;
+ final int bundleOlderThanDays = 1;
+ final int limit = 3;
+ new PurgeXCommand(wfOlderThanDays, coordOlderThanDays, bundleOlderThanDays, limit).call();
+
+ try {
+ jpaService.execute(wfJobGetCmd);
+ fail("Workflow Job should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0604, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(subwfJob1GetCmd);
+ fail("SubWorkflow Job 1 should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0604, je.getErrorCode());
+ }
+ }
+
+ /**
* Test : The subworkflow and workflow should get purged, but the coordinator parent shouldn't get purged --> none will get
* purged
*
@@ -3068,12 +3105,12 @@ public class TestPurgeXCommand extends XDataTestCase {
CoordinatorActionBean coordAction = addRecordToCoordActionTable(coordJob.getId(), 1, CoordinatorAction.Status.SUCCEEDED,
"coord-action-get.xml", wfJob.getId(), "SUCCEEDED", 0);
- WorkflowJobGetJPAExecutor wfJobGetCmd = new WorkflowJobGetJPAExecutor(wfJob.getId());
- WorkflowActionGetJPAExecutor wfActionGetCmd = new WorkflowActionGetJPAExecutor(wfAction.getId());
- WorkflowJobGetJPAExecutor subwfJobGetCmd = new WorkflowJobGetJPAExecutor(subwfJob.getId());
- WorkflowActionGetJPAExecutor subwfActionGetCmd = new WorkflowActionGetJPAExecutor(subwfAction.getId());
- CoordJobGetJPAExecutor coordJobGetCmd = new CoordJobGetJPAExecutor(coordJob.getId());
- CoordActionGetJPAExecutor coordActionGetCmd = new CoordActionGetJPAExecutor(coordAction.getId());
+ final WorkflowJobGetJPAExecutor wfJobGetCmd = new WorkflowJobGetJPAExecutor(wfJob.getId());
+ final WorkflowActionGetJPAExecutor wfActionGetCmd = new WorkflowActionGetJPAExecutor(wfAction.getId());
+ final WorkflowJobGetJPAExecutor subwfJobGetCmd = new WorkflowJobGetJPAExecutor(subwfJob.getId());
+ final WorkflowActionGetJPAExecutor subwfActionGetCmd = new WorkflowActionGetJPAExecutor(subwfAction.getId());
+ final CoordJobGetJPAExecutor coordJobGetCmd = new CoordJobGetJPAExecutor(coordJob.getId());
+ final CoordActionGetJPAExecutor coordActionGetCmd = new CoordActionGetJPAExecutor(coordAction.getId());
wfJob = jpaService.execute(wfJobGetCmd);
wfAction = jpaService.execute(wfActionGetCmd);
@@ -3139,6 +3176,115 @@ public class TestPurgeXCommand extends XDataTestCase {
}
}
+
+ /**
+ * Test : The subworkflow and workflow should get purged, and the coordinator parent should get purged --> all will get
+ * purged
+ *
+ * Coordinator parent finished Workflow and its subworkflow have terminated, last modified time is known, but end time is null
+ * for workflow and subworkflow
+ *
+ * @throws Exception
+ */
+ public void testPurgeCoordWithWFChildWithSubWFNullEndTimeValidLastModifiedTime() throws Exception {
+ final JPAService jpaService = Services.get().get(JPAService.class);
+ assertNotNull(jpaService);
+
+ CoordinatorJobBean coordJob = addRecordToCoordJobTable(CoordinatorJob.Status.SUCCEEDED, false, false);
+
+ final QueryExecutor<WorkflowJobBean, WorkflowJobQueryExecutor.WorkflowJobQuery> workflowJobQueryExecutor =
+ WorkflowJobQueryExecutor.getInstance();
+ WorkflowJobBean wfJob = addRecordToWfJobTable(WorkflowJob.Status.SUCCEEDED, WorkflowInstance.Status.SUCCEEDED);
+ wfJob.setLastModifiedTime(wfJob.getEndTime());
+ wfJob.setEndTime(null);
+ workflowJobQueryExecutor.executeUpdate(WorkflowJobQuery.UPDATE_WORKFLOW, wfJob);
+
+ WorkflowActionBean wfAction = addRecordToWfActionTable(wfJob.getId(), "1", WorkflowAction.Status.OK);
+ WorkflowJobBean subwfJob = addRecordToWfJobTable(WorkflowJob.Status.SUCCEEDED, WorkflowInstance.Status.SUCCEEDED,
+ wfJob.getId());
+ subwfJob.setLastModifiedTime(subwfJob.getEndTime());
+ subwfJob.setEndTime(null);
+ workflowJobQueryExecutor.executeUpdate(WorkflowJobQuery.UPDATE_WORKFLOW, subwfJob);
+
+ WorkflowActionBean subwfAction = addRecordToWfActionTable(subwfJob.getId(), "1", WorkflowAction.Status.OK);
+ CoordinatorActionBean coordAction = addRecordToCoordActionTable(coordJob.getId(), 1, CoordinatorAction.Status.SUCCEEDED,
+ "coord-action-get.xml", wfJob.getId(), "SUCCEEDED", 0);
+
+ final WorkflowJobGetJPAExecutor wfJobGetCmd = new WorkflowJobGetJPAExecutor(wfJob.getId());
+ final WorkflowActionGetJPAExecutor wfActionGetCmd = new WorkflowActionGetJPAExecutor(wfAction.getId());
+ final WorkflowJobGetJPAExecutor subwfJobGetCmd = new WorkflowJobGetJPAExecutor(subwfJob.getId());
+ final WorkflowActionGetJPAExecutor subwfActionGetCmd = new WorkflowActionGetJPAExecutor(subwfAction.getId());
+ final CoordJobGetJPAExecutor coordJobGetCmd = new CoordJobGetJPAExecutor(coordJob.getId());
+ final CoordActionGetJPAExecutor coordActionGetCmd = new CoordActionGetJPAExecutor(coordAction.getId());
+
+ wfJob = jpaService.execute(wfJobGetCmd);
+ wfAction = jpaService.execute(wfActionGetCmd);
+ subwfJob = jpaService.execute(subwfJobGetCmd);
+ subwfAction = jpaService.execute(subwfActionGetCmd);
+ coordJob = jpaService.execute(coordJobGetCmd);
+ coordAction = jpaService.execute(coordActionGetCmd);
+ assertEquals(WorkflowJob.Status.SUCCEEDED, wfJob.getStatus());
+ assertEquals(WorkflowAction.Status.OK, wfAction.getStatus());
+ assertEquals(WorkflowJob.Status.SUCCEEDED, subwfJob.getStatus());
+ assertEquals(WorkflowAction.Status.OK, subwfAction.getStatus());
+ assertEquals(CoordinatorJob.Status.SUCCEEDED, coordJob.getStatus());
+ assertEquals(CoordinatorAction.Status.SUCCEEDED, coordAction.getStatus());
+
+ final int wfOlderThanDays = 7;
+ final int coordOlderThanDays = 7;
+ final int bundleOlderThanDays = 1;
+ final int limit = 10;
+ new PurgeXCommand(wfOlderThanDays, coordOlderThanDays, bundleOlderThanDays, limit).call();
+
+ try {
+ jpaService.execute(coordJobGetCmd);
+ fail("Coordinator Job should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0604, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(coordActionGetCmd);
+ fail("Coordinator Action should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0605, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(wfJobGetCmd);
+ fail("Workflow Job should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0604, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(wfActionGetCmd);
+ fail("Workflow Action should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0605, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(subwfJobGetCmd);
+ fail("SubWorkflow Job should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0604, je.getErrorCode());
+ }
+
+ try {
+ jpaService.execute(subwfActionGetCmd);
+ fail("SubWorkflow Action should have been purged");
+ }
+ catch (JPAExecutorException je) {
+ assertEquals(ErrorCode.E0605, je.getErrorCode());
+ }
+ }
+
/**
* Test : The subworkflow, workflow, and coordinator should get purged, but the bundle parent shouldn't get purged --> none will
* get purged
http://git-wip-us.apache.org/repos/asf/oozie/blob/5fe2d4df/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index e563aaa..5feb3ce 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
-- Oozie 5.0.0 release (trunk - unreleased)
+OOZIE-1401 amend PurgeCommand should purge the workflow jobs w/o end_time (andras.piros, asasvari)
OOZIE-3085 Improve logging in ActionExecutors: add log entry for start(), end() and kill() (kmarton via andras.piros)
OOZIE-3083 Make improved version Info backward compatible (gezapeti via asasvari)
OOZIE-2150 Shell launcher should print shell script (jtolar via andras.piros)