Skip to content

Commit bce15b6

Browse files
doxiaorjeberhard
authored andcommitted
Owls 109611: clear FAILED/Aborted condition in waitForJobComplete code path
1 parent db066df commit bce15b6

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

operator/src/main/java/oracle/kubernetes/operator/steps/WatchDomainIntrospectorJobReadyStep.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
package oracle.kubernetes.operator.steps;
55

66
import io.kubernetes.client.openapi.models.V1Job;
7-
import oracle.kubernetes.operator.DomainStatusUpdater;
87
import oracle.kubernetes.operator.JobAwaiterStepFactory;
98
import oracle.kubernetes.operator.JobWatcher;
109
import oracle.kubernetes.operator.ProcessingConstants;
1110
import oracle.kubernetes.operator.work.NextAction;
1211
import oracle.kubernetes.operator.work.Packet;
1312
import oracle.kubernetes.operator.work.Step;
1413

14+
import static oracle.kubernetes.operator.DomainStatusUpdater.createRemoveFailuresStep;
15+
1516
public class WatchDomainIntrospectorJobReadyStep extends Step {
1617

1718
@Override
@@ -20,9 +21,9 @@ public NextAction apply(Packet packet) {
2021

2122
if (hasNotCompleted(domainIntrospectorJob)) {
2223
JobAwaiterStepFactory jw = packet.getSpi(JobAwaiterStepFactory.class);
23-
return doNext(jw.waitForReady(domainIntrospectorJob, getNext()), packet);
24+
return doNext(jw.waitForReady(domainIntrospectorJob, createRemoveFailuresStep(getNext())), packet);
2425
} else {
25-
return doNext(DomainStatusUpdater.createRemoveFailuresStep(getNext()), packet);
26+
return doNext(createRemoveFailuresStep(getNext()), packet);
2627
}
2728
}
2829

operator/src/test/java/oracle/kubernetes/operator/JobWatcherTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,28 @@
2020
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
2121
import oracle.kubernetes.operator.helpers.JobHelper;
2222
import oracle.kubernetes.operator.helpers.KubernetesTestSupport;
23+
import oracle.kubernetes.operator.steps.WatchDomainIntrospectorJobReadyStep;
2324
import oracle.kubernetes.operator.watcher.WatchListener;
2425
import oracle.kubernetes.operator.work.Step;
2526
import oracle.kubernetes.operator.work.TerminalStep;
2627
import oracle.kubernetes.utils.SystemClock;
28+
import oracle.kubernetes.weblogic.domain.model.DomainCondition;
2729
import oracle.kubernetes.weblogic.domain.model.DomainResource;
2830
import oracle.kubernetes.weblogic.domain.model.DomainSpec;
31+
import oracle.kubernetes.weblogic.domain.model.DomainStatus;
2932
import org.junit.jupiter.api.AfterEach;
3033
import org.junit.jupiter.api.BeforeEach;
3134
import org.junit.jupiter.api.Test;
3235

3336
import static oracle.kubernetes.operator.DomainProcessorTestSetup.NS;
3437
import static oracle.kubernetes.operator.DomainProcessorTestSetup.UID;
3538
import static oracle.kubernetes.operator.JobWatcher.NULL_LISTENER;
39+
import static oracle.kubernetes.operator.KubernetesConstants.DOMAIN;
3640
import static oracle.kubernetes.operator.LabelConstants.CREATEDBYOPERATOR_LABEL;
3741
import static oracle.kubernetes.operator.LabelConstants.DOMAINUID_LABEL;
42+
import static oracle.kubernetes.operator.ProcessingConstants.JOBWATCHER_COMPONENT_NAME;
43+
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.FAILED;
44+
import static oracle.kubernetes.weblogic.domain.model.DomainFailureReason.ABORTED;
3845
import static org.hamcrest.Matchers.both;
3946
import static org.hamcrest.Matchers.hasEntry;
4047
import static org.hamcrest.Matchers.instanceOf;
@@ -385,6 +392,16 @@ private void startWaitForReadyThenReadJob(Function<V1Job,V1Job> jobFunction, Ste
385392
}
386393
}
387394

395+
private void startWatchDomainIntrospectorJobReadyStep(Function<V1Job,V1Job> jobFunction) {
396+
V1Job persistedJob = jobFunction.apply(createJob());
397+
testSupport.defineResources(persistedJob);
398+
testSupport.defineResources(domain);
399+
testSupport.getPacket().put(ProcessingConstants.DOMAIN_INTROSPECTOR_JOB, this.dontChangeJob(persistedJob));
400+
domain.getOrCreateStatus().addCondition(new DomainCondition(FAILED).withReason(ABORTED).withMessage("ugh"));
401+
402+
testSupport.runSteps(testSupport.getPacket(), new WatchDomainIntrospectorJobReadyStep());
403+
}
404+
388405
private void startWaitForReadyWithJobPodFluentdThenReadJob(Function<V1Job,V1Job> jobFunction) {
389406
AtomicBoolean stopping = new AtomicBoolean(false);
390407
JobWatcher watcher = createWatcher(stopping);
@@ -438,6 +455,18 @@ void whenReceivedCallbackForIncompleteJob_ignoreIt() {
438455
assertThat(terminalStep.wasRun(), is(false));
439456
}
440457

458+
@Test
459+
void whenJobWithReady_performNextStep() {
460+
testSupport.addComponent(JOBWATCHER_COMPONENT_NAME, JobAwaiterStepFactory.class, new JobAwaiterStepFactoryStub());
461+
startWatchDomainIntrospectorJobReadyStep(this::dontChangeJob);
462+
463+
assertThat(getDomainStatus().hasConditionWithType(FAILED), is(false));
464+
}
465+
466+
private DomainStatus getDomainStatus() {
467+
return ((DomainResource)testSupport.getResources(DOMAIN).get(0)).getStatus();
468+
}
469+
441470
@SuppressWarnings("unused")
442471
private V1Job createCompletedJobWithDifferentTimestamp(V1Job job) {
443472
clock = clock.plusSeconds(1);
@@ -470,4 +499,11 @@ public void receivedEvents_areNotSentToListenersWhenWatchersPaused() {
470499
// Override as JobWatcher doesn't currently implement listener for callback
471500
}
472501

502+
private static class JobAwaiterStepFactoryStub implements JobAwaiterStepFactory {
503+
@Override
504+
public Step waitForReady(V1Job job, Step next) {
505+
return next;
506+
}
507+
}
508+
473509
}

0 commit comments

Comments
 (0)