fix: honor tidy recovery row counts
This commit is contained in:
@@ -29,9 +29,10 @@ public class TidyWorkflowRecoveryService {
|
||||
}
|
||||
if (evidence.stepId() == null) {
|
||||
if (evidence.activeTidyJobCount() == 0) {
|
||||
mapper.completeTidyWorkflow(evidence.workflowId());
|
||||
mapper.releaseTidyResources(evidence.workflowId());
|
||||
changed++;
|
||||
if (mapper.completeTidyWorkflow(evidence.workflowId()) > 0) {
|
||||
mapper.releaseTidyResources(evidence.workflowId());
|
||||
changed++;
|
||||
}
|
||||
} else {
|
||||
changed += pause(evidence, "RECOVERY_JOB_MISMATCH");
|
||||
}
|
||||
@@ -100,7 +101,9 @@ public class TidyWorkflowRecoveryService {
|
||||
}
|
||||
|
||||
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) {
|
||||
mapper.pauseTidyStep(evidence.workflowId(), evidence.stepNo(), reason);
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ class TidyWorkflowRecoveryServiceTest {
|
||||
mapper = mock(WmsAlgorithmMapper.class);
|
||||
transaction = mock(TidyWorkflowTransaction.class);
|
||||
service = new TidyWorkflowRecoveryService(mapper, transaction);
|
||||
when(mapper.completeTidyWorkflow(anyString())).thenReturn(1);
|
||||
when(mapper.pauseTidyWorkflow(anyString(), anyString())).thenReturn(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -70,6 +72,17 @@ class TidyWorkflowRecoveryServiceTest {
|
||||
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
|
||||
void completedStepsWithALingeringActiveJobPauseWithoutReleasingLocks() {
|
||||
TidyRecoveryEvidence evidence = matching().allStepsCompleted().activeTidyJobCount(1).build();
|
||||
@@ -82,6 +95,20 @@ class TidyWorkflowRecoveryServiceTest {
|
||||
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}")
|
||||
@MethodSource("pauseCases")
|
||||
void inconsistentLocalEvidencePausesWithoutReleasingLocks(
|
||||
|
||||
Reference in New Issue
Block a user