Let SimpleJobRepository#deleteJobInstance delete corresponding step executions

Resolves #4382
This commit is contained in:
Henning Poettker
2023-11-21 23:31:13 +01:00
committed by Mahmoud Ben Hassine
parent 0093e441c9
commit 36cd26fa1b
2 changed files with 29 additions and 38 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2023 the original author or authors.
* Copyright 2006-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -328,7 +328,7 @@ public class SimpleJobRepository implements JobRepository {
@Override
public void deleteJobInstance(JobInstance jobInstance) {
List<JobExecution> jobExecutions = this.jobExecutionDao.findJobExecutions(jobInstance);
List<JobExecution> jobExecutions = findJobExecutions(jobInstance);
for (JobExecution jobExecution : jobExecutions) {
deleteJobExecution(jobExecution);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2008-2022 the original author or authors.
* Copyright 2008-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,12 +32,13 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.fail;
/**
* Repository tests using JDBC DAOs (rather than mocks).
@@ -152,11 +153,7 @@ class SimpleJobRepositoryIntegrationTests {
@Transactional
@Test
void testSaveExecutionContext() throws Exception {
ExecutionContext ctx = new ExecutionContext() {
{
putLong("crashedPosition", 7);
}
};
ExecutionContext ctx = new ExecutionContext(Map.of("crashedPosition", 7));
JobExecution jobExec = jobRepository.createJobExecution(job.getName(), jobParameters);
jobExec.setStartTime(LocalDateTime.now());
jobExec.setExecutionContext(ctx);
@@ -169,11 +166,6 @@ class SimpleJobRepositoryIntegrationTests {
StepExecution retrievedStepExec = jobRepository.getLastStepExecution(jobExec.getJobInstance(), step.getName());
assertEquals(stepExec, retrievedStepExec);
assertEquals(ctx, retrievedStepExec.getExecutionContext());
// JobExecution retrievedJobExec =
// jobRepository.getLastJobExecution(jobExec.getJobInstance());
// assertEquals(jobExec, retrievedJobExec);
// assertEquals(ctx, retrievedJobExec.getExecutionContext());
}
/*
@@ -205,7 +197,7 @@ class SimpleJobRepositoryIntegrationTests {
jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
StepExecution stepExecution = new StepExecution("step1", jobExecution);
jobRepository.add(stepExecution);
jobExecution.addStepExecutions(Arrays.asList(stepExecution));
jobExecution.addStepExecutions(List.of(stepExecution));
assertEquals(jobExecution, jobRepository.getLastJobExecution(job.getName(), jobParameters));
assertEquals(stepExecution, jobExecution.getStepExecutions().iterator().next());
}
@@ -233,42 +225,41 @@ class SimpleJobRepositoryIntegrationTests {
*/
@Transactional
@Test
public void testReExecuteWithSameJobParametersWhenRunning() throws Exception {
void testReExecuteWithSameJobParametersWhenRunning() throws Exception {
JobParameters jobParameters = new JobParametersBuilder().addString("stringKey", "stringValue")
.toJobParameters();
// jobExecution with status STARTING
JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
try {
jobRepository.createJobExecution(job.getName(), jobParameters);
fail();
}
catch (JobExecutionAlreadyRunningException e) {
// expected
}
assertThrows(JobExecutionAlreadyRunningException.class,
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
// jobExecution with status STARTED
jobExecution.setStatus(BatchStatus.STARTED);
jobExecution.setStartTime(LocalDateTime.now());
jobRepository.update(jobExecution);
try {
jobRepository.createJobExecution(job.getName(), jobParameters);
fail();
}
catch (JobExecutionAlreadyRunningException e) {
// expected
}
assertThrows(JobExecutionAlreadyRunningException.class,
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
// jobExecution with status STOPPING
jobExecution.setStatus(BatchStatus.STOPPING);
jobRepository.update(jobExecution);
try {
jobRepository.createJobExecution(job.getName(), jobParameters);
fail();
}
catch (JobExecutionAlreadyRunningException e) {
// expected
}
assertThrows(JobExecutionAlreadyRunningException.class,
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
}
@Transactional
@Test
void testDeleteJobInstance() throws Exception {
var jobParameters = new JobParametersBuilder().addString("foo", "bar").toJobParameters();
var jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
var stepExecution = new StepExecution("step", jobExecution);
jobRepository.add(stepExecution);
jobRepository.deleteJobInstance(jobExecution.getJobInstance());
assertEquals(0, jobRepository.findJobInstancesByName(job.getName(), 0, 1).size());
assertNull(jobRepository.getLastJobExecution(job.getName(), jobParameters));
}
}