Added concept of 'Backout' in workflow steps

- A workflow step can define a 'backout'; i.e. a step to call if
   something goes wrong. This is important for steps that are dealing with
   an open connection as any open connections must be closed.
This commit is contained in:
Josh Stark 2015-10-17 17:28:29 +01:00
parent 5debe9aebd
commit 38b6ef1353
5 changed files with 21 additions and 5 deletions

View File

@ -19,7 +19,9 @@ public class FilterFilesWorkflowStep extends WorkflowStep {
private static final Logger LOGGER = LoggerFactory.getLogger(FilterFilesWorkflowStep.class);
public FilterFilesWorkflowStep() {
this.nextStep = new DownloadFilesWorkflowStep();
this.backoutStep = new DisconnectWorkflowStep();
}
@Override
@ -54,6 +56,9 @@ public class FilterFilesWorkflowStep extends WorkflowStep {
LOGGER.error("Unable to filter files. Error message was: {}", e.getMessage());
LOGGER.debug("Stacktrace", e);
LOGGER.info("Backing out of this run.");
backoutStep.runStep(schedule);
}
}

View File

@ -3,6 +3,7 @@ package io.linuxserver.davos.schedule.workflow;
public abstract class WorkflowStep {
protected WorkflowStep nextStep;
protected WorkflowStep backoutStep;
abstract public void runStep(ScheduleWorkflow schedule);
}

View File

@ -34,9 +34,12 @@ public class ConnectWorkflowStepTest {
@Mock
private Client mockClient;
@Mock
@Mock(name = "nextStep")
private WorkflowStep mockNextStep;
@Mock(name = "backoutStep")
private WorkflowStep mockBackoutStep;
@Before
public void setUp() {

View File

@ -32,9 +32,12 @@ public class DownloadFilesWorkflowStepTest {
@InjectMocks
private DownloadFilesWorkflowStep workflowStep = new DownloadFilesWorkflowStep();
@Mock
@Mock(name = "nextStep")
private WorkflowStep mockNextStep;
@Mock(name = "backoutStep")
private WorkflowStep mockBackoutStep;
@Mock
private Connection mockConnection;

View File

@ -27,8 +27,11 @@ public class FilterFilesWorkflowStepTest {
@InjectMocks
private FilterFilesWorkflowStep workflowStep = new FilterFilesWorkflowStep();
@Mock
@Mock(name = "nextStep")
private DownloadFilesWorkflowStep mockNextStep;
@Mock(name = "backoutStep")
private DisconnectWorkflowStep mockBackupStep;
@Mock
private Connection mockConnection;
@ -207,7 +210,7 @@ public class FilterFilesWorkflowStepTest {
}
@Test
public void ifListingFilesIsUnsuccessfulThenDoNotCallNextStep() {
public void ifListingFilesIsUnsuccessfulThenDoNotCallNextStepAndCallBackupStepInstead() {
ScheduleConfiguration config = new ScheduleConfiguration(null, null, null, 0, null, "remote/", "local/",
FileTransferType.FILES_ONLY);
@ -220,5 +223,6 @@ public class FilterFilesWorkflowStepTest {
workflowStep.runStep(schedule);
verify(mockNextStep, never()).runStep(schedule);
verify(mockBackupStep).runStep(schedule);
}
}