Skip to content

Commit 6c7322a

Browse files
committed
Correct job watch processing
1 parent a7ecff0 commit 6c7322a

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

operator/src/main/java/oracle/kubernetes/operator/DomainNamespaces.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public class DomainNamespaces {
7070
private final WatcherControl<CoreV1Event, OperatorEventWatcher> operatorEventWatchers
7171
= new WatcherControl<>(OperatorEventWatcher::create, d -> d::dispatchEventWatch);
7272
private final WatcherControl<V1Job, JobWatcher> jobWatchers
73-
= new WatcherControl<>(JobWatcher::create, d -> NULL_LISTENER);
73+
= new WatcherControl<>(JobWatcher::create, d -> d::dispatchJobWatch);
7474
private final WatcherControl<V1Pod, PodWatcher> podWatchers
7575
= new WatcherControl<>(PodWatcher::create, d -> d::dispatchPodWatch);
7676
private final WatcherControl<V1Service, ServiceWatcher> serviceWatchers

operator/src/main/java/oracle/kubernetes/operator/DomainProcessor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2018, 2023, Oracle and/or its affiliates.
1+
// Copyright (c) 2018, 2024, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.kubernetes.operator;
@@ -10,6 +10,7 @@
1010

1111
import io.kubernetes.client.openapi.models.CoreV1Event;
1212
import io.kubernetes.client.openapi.models.V1ConfigMap;
13+
import io.kubernetes.client.openapi.models.V1Job;
1314
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
1415
import io.kubernetes.client.openapi.models.V1Pod;
1516
import io.kubernetes.client.openapi.models.V1PodDisruptionBudget;
@@ -71,6 +72,12 @@ MakeRightClusterOperation createMakeRightOperationForClusterEvent(
7172
*/
7273
void dispatchDomainWatch(Watch.Response<DomainResource> item);
7374

75+
/**
76+
* Handles a watch event for jobs in the managed namespaces.
77+
* @param item a Kubernetes watch event
78+
*/
79+
void dispatchJobWatch(Watch.Response<V1Job> item);
80+
7481
/**
7582
* Handles a watch event for pods in the managed namespaces.
7683
* @param item a Kubernetes watch event

operator/src/main/java/oracle/kubernetes/operator/DomainProcessorImpl.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.kubernetes.client.extended.controller.reconciler.Result;
2020
import io.kubernetes.client.openapi.models.CoreV1Event;
2121
import io.kubernetes.client.openapi.models.V1ConfigMap;
22+
import io.kubernetes.client.openapi.models.V1Job;
2223
import io.kubernetes.client.openapi.models.V1ObjectMeta;
2324
import io.kubernetes.client.openapi.models.V1ObjectReference;
2425
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
@@ -51,6 +52,7 @@
5152
import oracle.kubernetes.operator.logging.ThreadLoggingContext;
5253
import oracle.kubernetes.operator.steps.BeforeAdminServiceStep;
5354
import oracle.kubernetes.operator.tuning.TuningParameters;
55+
import oracle.kubernetes.operator.watcher.JobWatcher;
5456
import oracle.kubernetes.operator.work.Cancellable;
5557
import oracle.kubernetes.operator.work.Fiber;
5658
import oracle.kubernetes.operator.work.Fiber.CompletionCallback;
@@ -543,6 +545,42 @@ private String getDomainUid(Fiber fiber) {
543545
.map(DomainPresenceInfo::getDomainUid).orElse("");
544546
}
545547

548+
/**
549+
* Dispatch job watch event.
550+
* @param item watch event
551+
*/
552+
public void dispatchJobWatch(Watch.Response<V1Job> item) {
553+
V1Job job = item.object;
554+
String domainUid = getJobDomainUid(job);
555+
String namespace = Optional.ofNullable(job.getMetadata()).map(V1ObjectMeta::getNamespace).orElse(null);
556+
if (domainUid == null || namespace == null) {
557+
return;
558+
}
559+
560+
DomainPresenceInfo info = getExistingDomainPresenceInfo(namespace, domainUid);
561+
if (info == null) {
562+
return;
563+
}
564+
565+
switch (item.type) {
566+
case MODIFIED:
567+
if (JobWatcher.isComplete(job) || JobWatcher.isFailed(job)) {
568+
createMakeRightOperation(info).interrupt().withExplicitRecheck().execute();
569+
}
570+
break;
571+
default:
572+
}
573+
}
574+
575+
private static String getJobDomainUid(V1Job job) {
576+
return Optional.ofNullable(job)
577+
.map(V1Job::getMetadata)
578+
.map(V1ObjectMeta::getLabels)
579+
.orElse(Collections.emptyMap())
580+
.get(LabelConstants.DOMAINUID_LABEL);
581+
}
582+
583+
546584
/**
547585
* Dispatch pod watch event.
548586
* @param item watch event

operator/src/main/java/oracle/kubernetes/operator/helpers/JobHelper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,16 +459,16 @@ private Step checkForFailedIntrospectionJob() {
459459
return new CheckForFailedIntrospectorStep();
460460
}
461461

462-
private static class CheckForFailedIntrospectorStep extends Step {
462+
private class CheckForFailedIntrospectorStep extends Step {
463463

464464
@Override
465465
public @Nonnull Result apply(Packet packet) {
466466
V1Job domainIntrospectorJob = (V1Job) packet.get(ProcessingConstants.DOMAIN_INTROSPECTOR_JOB);
467467

468468
if (JobWatcher.isFailed(domainIntrospectorJob)) {
469469
return doNext(
470-
Step.chain(createIntrospectionFailureSteps(
471-
getFailedReason(domainIntrospectorJob), domainIntrospectorJob), getNext()), packet);
470+
Step.chain(createIntrospectionFailureSteps(getFailedReason(domainIntrospectorJob), domainIntrospectorJob),
471+
cleanUpAndReintrospect(getNext())), packet);
472472
}
473473
if (JobWatcher.isComplete(domainIntrospectorJob)) {
474474
return doNext(createRemoveFailuresStep(getNext()), packet);

0 commit comments

Comments
 (0)