TSK-1404: Delete old Cleanup jobs when initializing
This commit is contained in:
parent
4b5d2c90ad
commit
f113410ef4
|
@ -11,6 +11,5 @@ DELETE FROM WORKBASKET;
|
|||
DELETE FROM DISTRIBUTION_TARGETS;
|
||||
DELETE FROM CLASSIFICATION;
|
||||
DELETE FROM OBJECT_REFERENCE;
|
||||
-- do not clean JOB table
|
||||
-- DELETE FROM SCHEDULED_JOB;
|
||||
DELETE FROM SCHEDULED_JOB;
|
||||
COMMIT;
|
||||
|
|
|
@ -28,6 +28,7 @@ import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
|||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.exceptions.SystemException;
|
||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||
import pro.taskana.common.internal.JobServiceImpl;
|
||||
import pro.taskana.common.internal.jobs.AbstractTaskanaJob;
|
||||
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
|
||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||
|
@ -148,6 +149,8 @@ public class HistoryCleanupJob extends AbstractTaskanaJob {
|
|||
* @param taskanaEngine the TASKANA engine.
|
||||
*/
|
||||
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
|
||||
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
|
||||
jobService.deleteJobs(Type.HISTORYCLEANUPJOB);
|
||||
HistoryCleanupJob job = new HistoryCleanupJob(taskanaEngine, null, null);
|
||||
job.scheduleNextCleanupJob();
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ import org.slf4j.LoggerFactory;
|
|||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.internal.JobMapper;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.util.IdGenerator;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||
|
@ -169,6 +171,16 @@ public abstract class AbstractAccTest {
|
|||
return sqlSessionManager.getMapper(TaskHistoryQueryMapper.class);
|
||||
}
|
||||
|
||||
protected JobMapper getJobMapper() throws NoSuchFieldException, IllegalAccessException {
|
||||
|
||||
Field sessionManagerField = TaskanaEngineImpl.class.getDeclaredField("sessionManager");
|
||||
sessionManagerField.setAccessible(true);
|
||||
SqlSessionManager sqlSessionManager =
|
||||
(SqlSessionManager) sessionManagerField.get(taskanaEngine);
|
||||
|
||||
return sqlSessionManager.getMapper(JobMapper.class);
|
||||
}
|
||||
|
||||
protected ObjectReference createObjectRef(
|
||||
String company, String system, String systemInstance, String type, String value) {
|
||||
ObjectReference objectRef = new ObjectReference();
|
||||
|
|
|
@ -5,10 +5,13 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import acceptance.AbstractAccTest;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.simplehistory.impl.jobs.HistoryCleanupJob;
|
||||
|
@ -360,4 +363,33 @@ class HistoryCleanupJobAccTest extends AbstractAccTest {
|
|||
|
||||
assertThat(getHistoryService().createTaskHistoryQuery().count()).isEqualTo(15);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "admin")
|
||||
@Test
|
||||
void should_DeleteOldHistoryCleanupJobs_When_InitializingSchedule() throws Exception {
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
ScheduledJob job = new ScheduledJob();
|
||||
job.setType(ScheduledJob.Type.HISTORYCLEANUPJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.UPDATETASKSJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.CLASSIFICATIONCHANGEDJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
}
|
||||
|
||||
List<ScheduledJob> jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(30);
|
||||
|
||||
HistoryCleanupJob.initializeSchedule(taskanaEngine);
|
||||
|
||||
jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(20);
|
||||
|
||||
assertThat(jobsToRun)
|
||||
.extracting(ScheduledJob::getType)
|
||||
.containsOnly(Type.CLASSIFICATIONCHANGEDJOB, Type.UPDATETASKSJOB);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Select;
|
|||
import org.apache.ibatis.annotations.Update;
|
||||
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.internal.persistence.MapTypeHandler;
|
||||
|
||||
/** This class is the mybatis mapping of the JOB table. */
|
||||
|
@ -70,4 +71,7 @@ public interface JobMapper {
|
|||
|
||||
@Delete(value = "DELETE FROM SCHEDULED_JOB WHERE JOB_ID = #{jobId}")
|
||||
void delete(ScheduledJob job);
|
||||
|
||||
@Delete(value = "DELETE FROM SCHEDULED_JOB WHERE TYPE = #{jobType}")
|
||||
void deleteMultiple(Type jobType);
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
import pro.taskana.common.api.JobService;
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
|
||||
/** Controls all job activities. */
|
||||
public class JobServiceImpl implements JobService {
|
||||
|
@ -39,6 +40,18 @@ public class JobServiceImpl implements JobService {
|
|||
return job;
|
||||
}
|
||||
|
||||
public void deleteJobs(Type jobType) {
|
||||
LOGGER.debug("entry to deleteJobs(jobType = {})", jobType);
|
||||
try {
|
||||
taskanaEngineImpl.openConnection();
|
||||
jobMapper.deleteMultiple(jobType);
|
||||
LOGGER.debug("Deleted jobs of type: {}", jobType);
|
||||
} finally {
|
||||
taskanaEngineImpl.returnConnection();
|
||||
LOGGER.debug("exit from deleteJobs()");
|
||||
}
|
||||
}
|
||||
|
||||
public ScheduledJob lockJob(ScheduledJob job, String owner) {
|
||||
LOGGER.debug("entry to lockJob(jobId = {}, owner = {})", job.getJobId(), owner);
|
||||
try {
|
||||
|
|
|
@ -12,11 +12,13 @@ import org.slf4j.LoggerFactory;
|
|||
import pro.taskana.common.api.BaseQuery.SortDirection;
|
||||
import pro.taskana.common.api.BulkOperationResults;
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.TimeInterval;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||
import pro.taskana.common.internal.JobServiceImpl;
|
||||
import pro.taskana.common.internal.jobs.AbstractTaskanaJob;
|
||||
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
|
||||
import pro.taskana.common.internal.util.LogSanitizer;
|
||||
|
@ -80,6 +82,8 @@ public class TaskCleanupJob extends AbstractTaskanaJob {
|
|||
* @param taskanaEngine the TASKANA engine.
|
||||
*/
|
||||
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
|
||||
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
|
||||
jobService.deleteJobs(Type.TASKCLEANUPJOB);
|
||||
TaskCleanupJob job = new TaskCleanupJob(taskanaEngine, null, null);
|
||||
job.scheduleNextCleanupJob();
|
||||
}
|
||||
|
|
|
@ -9,10 +9,12 @@ import org.slf4j.LoggerFactory;
|
|||
import pro.taskana.common.api.BaseQuery;
|
||||
import pro.taskana.common.api.BulkOperationResults;
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.api.TaskanaEngine;
|
||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.common.api.exceptions.TaskanaException;
|
||||
import pro.taskana.common.internal.JobServiceImpl;
|
||||
import pro.taskana.common.internal.jobs.AbstractTaskanaJob;
|
||||
import pro.taskana.common.internal.transaction.TaskanaTransactionProvider;
|
||||
import pro.taskana.workbasket.api.WorkbasketQueryColumnName;
|
||||
|
@ -71,6 +73,8 @@ public class WorkbasketCleanupJob extends AbstractTaskanaJob {
|
|||
* @param taskanaEngine the taskana engine
|
||||
*/
|
||||
public static void initializeSchedule(TaskanaEngine taskanaEngine) {
|
||||
JobServiceImpl jobService = (JobServiceImpl) taskanaEngine.getJobService();
|
||||
jobService.deleteJobs(Type.WORKBASKETCLEANUPJOB);
|
||||
WorkbasketCleanupJob job = new WorkbasketCleanupJob(taskanaEngine, null, null);
|
||||
job.scheduleNextCleanupJob();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package acceptance;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
|
@ -12,6 +13,7 @@ import java.util.Map;
|
|||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import javax.sql.DataSource;
|
||||
import org.apache.ibatis.session.SqlSessionManager;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
|
||||
import pro.taskana.TaskanaEngineConfiguration;
|
||||
|
@ -19,6 +21,8 @@ import pro.taskana.common.api.TaskanaEngine;
|
|||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.common.api.TimeInterval;
|
||||
import pro.taskana.common.api.WorkingDaysToDaysConverter;
|
||||
import pro.taskana.common.internal.JobMapper;
|
||||
import pro.taskana.common.internal.TaskanaEngineImpl;
|
||||
import pro.taskana.common.internal.TaskanaEngineTestConfiguration;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
import pro.taskana.task.api.models.Attachment;
|
||||
|
@ -59,6 +63,16 @@ public abstract class AbstractAccTest {
|
|||
sampleDataGenerator.generateTestData();
|
||||
}
|
||||
|
||||
protected JobMapper getJobMapper() throws NoSuchFieldException, IllegalAccessException {
|
||||
|
||||
Field sessionManagerField = TaskanaEngineImpl.class.getDeclaredField("sessionManager");
|
||||
sessionManagerField.setAccessible(true);
|
||||
SqlSessionManager sqlSessionManager =
|
||||
(SqlSessionManager) sessionManagerField.get(taskanaEngine);
|
||||
|
||||
return sqlSessionManager.getMapper(JobMapper.class);
|
||||
}
|
||||
|
||||
protected ObjectReference createObjectReference(
|
||||
String company, String system, String systemInstance, String type, String value) {
|
||||
ObjectReference objectReference = new ObjectReference();
|
||||
|
|
|
@ -9,6 +9,8 @@ import org.junit.jupiter.api.BeforeEach;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.task.api.TaskService;
|
||||
|
@ -85,6 +87,35 @@ class TaskCleanupJobAccTest extends AbstractAccTest {
|
|||
assertThat(completedCreatedTask).isNotNull();
|
||||
}
|
||||
|
||||
@WithAccessId(user = "admin")
|
||||
@Test
|
||||
void should_DeleteOldTaskCleanupJobs_When_InitializingSchedule() throws Exception {
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
ScheduledJob job = new ScheduledJob();
|
||||
job.setType(ScheduledJob.Type.TASKCLEANUPJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.UPDATETASKSJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.CLASSIFICATIONCHANGEDJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
}
|
||||
|
||||
List<ScheduledJob> jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(30);
|
||||
|
||||
TaskCleanupJob.initializeSchedule(taskanaEngine);
|
||||
|
||||
jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(20);
|
||||
|
||||
assertThat(jobsToRun)
|
||||
.extracting(ScheduledJob::getType)
|
||||
.containsOnly(Type.CLASSIFICATIONCHANGEDJOB, Type.UPDATETASKSJOB);
|
||||
}
|
||||
|
||||
private Task createAndCompleteTask() throws Exception {
|
||||
Task newTask = taskService.newTask("user-1-1", "DOMAIN_A");
|
||||
newTask.setClassificationKey("T2100");
|
||||
|
|
|
@ -9,6 +9,8 @@ import org.junit.jupiter.api.Test;
|
|||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
|
||||
import pro.taskana.common.api.BaseQuery;
|
||||
import pro.taskana.common.api.ScheduledJob;
|
||||
import pro.taskana.common.api.ScheduledJob.Type;
|
||||
import pro.taskana.common.test.security.JaasExtension;
|
||||
import pro.taskana.common.test.security.WithAccessId;
|
||||
import pro.taskana.task.api.TaskService;
|
||||
|
@ -85,6 +87,35 @@ class WorkbasketCleanupJobAccTest extends AbstractAccTest {
|
|||
assertThat(totalWorkbasketCount).isEqualTo(25);
|
||||
}
|
||||
|
||||
@WithAccessId(user = "admin")
|
||||
@Test
|
||||
void should_DeleteOldWorkbasketCleanupJobs_When_InitializingSchedule() throws Exception {
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
ScheduledJob job = new ScheduledJob();
|
||||
job.setType(ScheduledJob.Type.WORKBASKETCLEANUPJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.UPDATETASKSJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
job.setType(Type.CLASSIFICATIONCHANGEDJOB);
|
||||
taskanaEngine.getJobService().createJob(job);
|
||||
}
|
||||
|
||||
List<ScheduledJob> jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(30);
|
||||
|
||||
WorkbasketCleanupJob.initializeSchedule(taskanaEngine);
|
||||
|
||||
jobsToRun = getJobMapper().findJobsToRun();
|
||||
|
||||
assertThat(jobsToRun).hasSize(20);
|
||||
|
||||
assertThat(jobsToRun)
|
||||
.extracting(ScheduledJob::getType)
|
||||
.containsOnly(Type.CLASSIFICATIONCHANGEDJOB, Type.UPDATETASKSJOB);
|
||||
}
|
||||
|
||||
private long getNumberTaskNotCompleted(String workbasketId) {
|
||||
return taskService
|
||||
.createTaskQuery()
|
||||
|
|
Loading…
Reference in New Issue