fix: honor tidy recovery row counts
This commit is contained in:
@@ -29,9 +29,10 @@ public class TidyWorkflowRecoveryService {
|
|||||||
}
|
}
|
||||||
if (evidence.stepId() == null) {
|
if (evidence.stepId() == null) {
|
||||||
if (evidence.activeTidyJobCount() == 0) {
|
if (evidence.activeTidyJobCount() == 0) {
|
||||||
mapper.completeTidyWorkflow(evidence.workflowId());
|
if (mapper.completeTidyWorkflow(evidence.workflowId()) > 0) {
|
||||||
mapper.releaseTidyResources(evidence.workflowId());
|
mapper.releaseTidyResources(evidence.workflowId());
|
||||||
changed++;
|
changed++;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
changed += pause(evidence, "RECOVERY_JOB_MISMATCH");
|
changed += pause(evidence, "RECOVERY_JOB_MISMATCH");
|
||||||
}
|
}
|
||||||
@@ -100,7 +101,9 @@ public class TidyWorkflowRecoveryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int pause(TidyRecoveryEvidence evidence, String reason) {
|
private int pause(TidyRecoveryEvidence evidence, String reason) {
|
||||||
mapper.pauseTidyWorkflow(evidence.workflowId(), reason);
|
if (mapper.pauseTidyWorkflow(evidence.workflowId(), reason) == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (evidence.stepNo() != null) {
|
if (evidence.stepNo() != null) {
|
||||||
mapper.pauseTidyStep(evidence.workflowId(), evidence.stepNo(), reason);
|
mapper.pauseTidyStep(evidence.workflowId(), evidence.stepNo(), reason);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ class TidyWorkflowRecoveryServiceTest {
|
|||||||
mapper = mock(WmsAlgorithmMapper.class);
|
mapper = mock(WmsAlgorithmMapper.class);
|
||||||
transaction = mock(TidyWorkflowTransaction.class);
|
transaction = mock(TidyWorkflowTransaction.class);
|
||||||
service = new TidyWorkflowRecoveryService(mapper, transaction);
|
service = new TidyWorkflowRecoveryService(mapper, transaction);
|
||||||
|
when(mapper.completeTidyWorkflow(anyString())).thenReturn(1);
|
||||||
|
when(mapper.pauseTidyWorkflow(anyString(), anyString())).thenReturn(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -70,6 +72,17 @@ class TidyWorkflowRecoveryServiceTest {
|
|||||||
verify(mapper).releaseTidyResources(evidence.workflowId());
|
verify(mapper).releaseTidyResources(evidence.workflowId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void completedStepsAlreadyFinalizedReturnZeroAndDoNotReleaseLocksAgain() {
|
||||||
|
TidyRecoveryEvidence evidence = matching().allStepsCompleted().build();
|
||||||
|
when(mapper.selectTidyRecoveryEvidence("01")).thenReturn(List.of(evidence));
|
||||||
|
when(mapper.completeTidyWorkflow(evidence.workflowId())).thenReturn(0);
|
||||||
|
|
||||||
|
assertThat(service.reconcile("01")).isZero();
|
||||||
|
|
||||||
|
verify(mapper, never()).releaseTidyResources(anyString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void completedStepsWithALingeringActiveJobPauseWithoutReleasingLocks() {
|
void completedStepsWithALingeringActiveJobPauseWithoutReleasingLocks() {
|
||||||
TidyRecoveryEvidence evidence = matching().allStepsCompleted().activeTidyJobCount(1).build();
|
TidyRecoveryEvidence evidence = matching().allStepsCompleted().activeTidyJobCount(1).build();
|
||||||
@@ -82,6 +95,20 @@ class TidyWorkflowRecoveryServiceTest {
|
|||||||
verify(mapper, never()).releaseTidyResources(anyString());
|
verify(mapper, never()).releaseTidyResources(anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void pauseThatChangesNoWorkflowRowReturnsZeroAndDoesNotPauseTheStep() {
|
||||||
|
TidyRecoveryEvidence evidence = matching().missingJobs().build();
|
||||||
|
when(mapper.selectTidyRecoveryEvidence("01")).thenReturn(List.of(evidence));
|
||||||
|
when(mapper.pauseTidyWorkflow(evidence.workflowId(), "RECOVERY_JOB_MISSING"))
|
||||||
|
.thenReturn(0);
|
||||||
|
|
||||||
|
assertThat(service.reconcile("01")).isZero();
|
||||||
|
|
||||||
|
verify(mapper, never()).pauseTidyStep(anyString(),
|
||||||
|
org.mockito.ArgumentMatchers.anyInt(), anyString());
|
||||||
|
verify(mapper, never()).releaseTidyResources(anyString());
|
||||||
|
}
|
||||||
|
|
||||||
@ParameterizedTest(name = "{0}")
|
@ParameterizedTest(name = "{0}")
|
||||||
@MethodSource("pauseCases")
|
@MethodSource("pauseCases")
|
||||||
void inconsistentLocalEvidencePausesWithoutReleasingLocks(
|
void inconsistentLocalEvidencePausesWithoutReleasingLocks(
|
||||||
|
|||||||
Reference in New Issue
Block a user