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:
dhgarrette
2009-02-13 06:12:28 +00:00
parent a3548b4190
commit b04841548e
63 changed files with 364 additions and 295 deletions

View File

@@ -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.");

View File

@@ -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

View File

@@ -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);
}
/*

View File

@@ -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();

View File

@@ -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"));

View File

@@ -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);