BATCH-1064: Switched the semantics of INCOMPLETE and FAILED. Combined INCOMPLETE with STOPPED. INCOMPLETE jobs and steps can be restarted while COMPLETED and FAILED jobs and steps cannot.
This commit is contained in:
@@ -99,11 +99,11 @@ public class ChunkMessageChannelItemWriter<T> extends StepExecutionListenerSuppo
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
logger.debug("Detected failure waiting for results in step listener.", e);
|
||||
stepExecution.setStatus(BatchStatus.FAILED);
|
||||
stepExecution.setStatus(BatchStatus.INCOMPLETE);
|
||||
return ExitStatus.FAILED.addExitDescription(e.getClass().getName() + ": " + e.getMessage());
|
||||
}
|
||||
if (timedOut) {
|
||||
stepExecution.setStatus(BatchStatus.FAILED);
|
||||
stepExecution.setStatus(BatchStatus.INCOMPLETE);
|
||||
throw new ItemStreamException("Timed out waiting for back log at end of step");
|
||||
}
|
||||
return ExitStatus.COMPLETED.addExitDescription("Waited for " + expecting + " results.");
|
||||
|
||||
@@ -27,8 +27,8 @@ import org.springframework.batch.core.JobExecution;
|
||||
* (generally a handler cannot determine if the whole job execution is complete,
|
||||
* so this is just information about the step).<br/>
|
||||
*
|
||||
* If the incoming status is {@link BatchStatus#FAILED},
|
||||
* {@link BatchStatus#STOPPED} or {@link BatchStatus#STOPPING} the request
|
||||
* If the incoming status is {@link BatchStatus#INCOMPLETE},
|
||||
* {@link BatchStatus#FAILED} or {@link BatchStatus#STOPPING} the request
|
||||
* should be ignored by handlers (passed on without modification).
|
||||
*
|
||||
* @author Dave Syer
|
||||
|
||||
@@ -136,7 +136,7 @@ public class StepExecutionMessageHandler {
|
||||
* @return
|
||||
*/
|
||||
private boolean isComplete(JobExecutionRequest request) {
|
||||
return request.getStatus() == BatchStatus.FAILED || request.getStatus() == BatchStatus.STOPPED
|
||||
return request.getStatus() == BatchStatus.INCOMPLETE || request.getStatus() == BatchStatus.FAILED
|
||||
|| request.getStatus() == BatchStatus.STOPPING;
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ public class StepExecutionMessageHandler {
|
||||
*/
|
||||
private void handleFailure(JobExecutionRequest request, Throwable e) {
|
||||
request.registerThrowable(e);
|
||||
request.setStatus(BatchStatus.FAILED);
|
||||
request.setStatus(BatchStatus.INCOMPLETE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -170,7 +170,7 @@ public class ChunkMessageItemWriterIntegrationTests {
|
||||
// And make the back log real
|
||||
requests.send(getSimpleMessage("foo", 4321L));
|
||||
step.execute(stepExecution);
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
String message = stepExecution.getExitStatus().getExitDescription();
|
||||
assertTrue("Message does not contain 'wrong job': " + message, message.contains("wrong job"));
|
||||
@@ -207,7 +207,7 @@ public class ChunkMessageItemWriterIntegrationTests {
|
||||
|
||||
StepExecution stepExecution = getStepExecution(step);
|
||||
step.execute(stepExecution);
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
String message = stepExecution.getExitStatus().getExitDescription();
|
||||
assertTrue("Message does not contain 'bad': " + message, message.contains("bad"));
|
||||
@@ -219,7 +219,7 @@ public class ChunkMessageItemWriterIntegrationTests {
|
||||
assertTrue(1 <= TestItemWriter.count);
|
||||
assertTrue(6 >= TestItemWriter.count);
|
||||
// But it should fail the step in any case
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ public class ChunkMessageItemWriterIntegrationTests {
|
||||
* loop would be bad, so the best we can do is fail as fast as possible.
|
||||
*/
|
||||
step.execute(stepExecution);
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
String message = stepExecution.getExitStatus().getExitDescription();
|
||||
assertTrue("Message did not contain 'timed out': " + message, message.toLowerCase().contains("timed out"));
|
||||
@@ -276,7 +276,7 @@ public class ChunkMessageItemWriterIntegrationTests {
|
||||
assertTrue(1 <= TestItemWriter.count);
|
||||
assertTrue(6 >= TestItemWriter.count);
|
||||
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
|
||||
String exitDescription = stepExecution.getExitStatus().getExitDescription();
|
||||
|
||||
@@ -105,7 +105,7 @@ public class MessageOrientedStepTests {
|
||||
step.setPollingInterval(100);
|
||||
StepExecution stepExecution = jobExecution.createStepExecution(step.getName());
|
||||
step.execute(stepExecution);
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
String message = stepExecution.getExitStatus().getExitDescription();
|
||||
assertTrue("Wrong message: " + message, message.contains("StepExecutionTimeoutException"));
|
||||
@@ -134,7 +134,7 @@ public class MessageOrientedStepTests {
|
||||
});
|
||||
StepExecution stepExecution = jobExecution.createStepExecution(step.getName());
|
||||
step.execute(stepExecution);
|
||||
assertEquals(BatchStatus.FAILED, stepExecution.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, stepExecution.getStatus());
|
||||
assertEquals(ExitStatus.FAILED.getExitCode(), stepExecution.getExitStatus().getExitCode());
|
||||
String message = stepExecution.getExitStatus().getExitDescription();
|
||||
assertTrue("Wrong message: " + message, message.contains("Planned failure"));
|
||||
|
||||
@@ -123,7 +123,7 @@ public class StepExecutionMessageHandlerTests {
|
||||
JobRepositorySupport jobRepository = new JobRepositorySupport();
|
||||
StepExecutionMessageHandler handler = createHandler(jobRepository);
|
||||
JobExecution jobExecution = jobRepository.createJobExecution("job", new JobParameters());
|
||||
jobExecution.setStatus(BatchStatus.FAILED);
|
||||
jobExecution.setStatus(BatchStatus.INCOMPLETE);
|
||||
JobExecutionRequest message = handler.handle(new JobExecutionRequest(jobExecution));
|
||||
assertEquals(0, message.getJobExecution().getStepExecutions().size());
|
||||
}
|
||||
@@ -134,7 +134,7 @@ public class StepExecutionMessageHandlerTests {
|
||||
@Override
|
||||
public StepExecution getLastStepExecution(JobInstance jobInstance, String stepName) {
|
||||
StepExecution stepExecution = new StepExecution(stepName, new JobExecution(jobInstance));
|
||||
stepExecution.setStatus(BatchStatus.FAILED);
|
||||
stepExecution.setStatus(BatchStatus.INCOMPLETE);
|
||||
stepExecution.setExecutionContext(new ExecutionContext() {
|
||||
{
|
||||
put("foo", "bar");
|
||||
@@ -205,7 +205,7 @@ public class StepExecutionMessageHandlerTests {
|
||||
assertNotNull(message);
|
||||
assertEquals(1, jobExecution.getStepExecutions().size());
|
||||
JobExecutionRequest payload = message;
|
||||
assertEquals(BatchStatus.FAILED, payload.getStatus());
|
||||
assertEquals(BatchStatus.INCOMPLETE, payload.getStatus());
|
||||
assertTrue(payload.hasErrors());
|
||||
Throwable error = payload.getLastThrowable();
|
||||
assertTrue(error instanceof StartLimitExceededException);
|
||||
|
||||
Reference in New Issue
Block a user