Skip to content

Commit 6142f12

Browse files
ankediarjeberhard
andauthored
Owls 105463 - Generate domain DELETED event when domain has deletion timestamp or not found during make-right (#3846)
* Fix to generate DOMAIN_DELETED event when domain has deletion timestamp or not found during make-right. Co-authored-by: Ryan Eberhard <[email protected]>
1 parent 5af06e5 commit 6142f12

File tree

4 files changed

+27
-27
lines changed

4 files changed

+27
-27
lines changed

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939

4040
import static oracle.kubernetes.common.logging.MessageKeys.EXECUTE_MAKE_RIGHT_DOMAIN;
4141
import static oracle.kubernetes.common.logging.MessageKeys.LOG_WAITING_COUNT;
42-
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_NOT_FOUND;
4342
import static oracle.kubernetes.operator.ProcessingConstants.SERVER_NAME;
4443
import static oracle.kubernetes.operator.WebLogicConstants.SHUTDOWN_STATE;
44+
import static oracle.kubernetes.operator.WebLogicConstants.UNKNOWN_STATE;
4545

4646
/**
4747
* Watches for changes to pods.
@@ -428,7 +428,7 @@ protected ResponseStep resumeIfReady(WaitForReadyStep.Callback callback) {
428428
return new WaitForServerShutdownResponseStep(callback, serverName);
429429
}
430430

431-
private class WaitForServerShutdownResponseStep extends ResponseStep<DomainResource> {
431+
private class WaitForServerShutdownResponseStep extends DefaultResponseStep<DomainResource> {
432432

433433
private final WaitForReadyStep<DomainResource>.Callback callback;
434434
private final String serverName;
@@ -442,7 +442,7 @@ private class WaitForServerShutdownResponseStep extends ResponseStep<DomainResou
442442
@Override
443443
public NextAction onSuccess(Packet packet, CallResponse<DomainResource> callResponse) {
444444
DomainPresenceInfo info = packet.getSpi(DomainPresenceInfo.class);
445-
if (isReady(callResponse.getResult()) || callback.didResumeFiber()) {
445+
if (isServerShutdown(info) || isReady(callResponse.getResult()) || callback.didResumeFiber()) {
446446
Optional.ofNullable(info).ifPresent(i -> i.updateLastKnownServerStatus(serverName, SHUTDOWN_STATE));
447447
callback.proceedFromWait(callResponse.getResult());
448448
return doEnd(packet);
@@ -452,11 +452,9 @@ public NextAction onSuccess(Packet packet, CallResponse<DomainResource> callResp
452452
}
453453
}
454454

455-
@Override
456-
public NextAction onFailure(Packet packet, CallResponse<DomainResource> callResponse) {
457-
return callResponse.getStatusCode() == HTTP_NOT_FOUND
458-
? doNext(packet)
459-
: super.onFailure(packet, callResponse);
455+
private boolean isServerShutdown(DomainPresenceInfo info) {
456+
return Optional.ofNullable(info).map(i -> i.getLastKnownServerStatus(serverName))
457+
.map(s -> SHUTDOWN_STATE.equals(s.getStatus()) || UNKNOWN_STATE.equals(s.getStatus())).orElse(false);
460458
}
461459
}
462460
}

operator/src/main/java/oracle/kubernetes/operator/makeright/MakeRightDomainOperationImpl.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2022, 2023, 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.makeright;
@@ -56,12 +56,14 @@
5656
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_NOT_FOUND;
5757
import static oracle.kubernetes.operator.LabelConstants.INTROSPECTION_STATE_LABEL;
5858
import static oracle.kubernetes.operator.ProcessingConstants.DOMAIN_INTROSPECT_REQUESTED;
59+
import static oracle.kubernetes.operator.helpers.EventHelper.EventItem.DOMAIN_DELETED;
5960

6061
/**
6162
* A factory which creates and executes steps to align the cached domain status with the value read from Kubernetes.
6263
*/
6364
public class MakeRightDomainOperationImpl extends MakeRightOperationImpl<DomainPresenceInfo>
6465
implements MakeRightDomainOperation {
66+
6567
private boolean explicitRecheck;
6668
private boolean deleting;
6769
private boolean inspectionRun;
@@ -258,10 +260,14 @@ private boolean isForDomain(ClusterResource clusterResource, DomainPresenceInfo
258260
}
259261

260262
private Step createDomainDownPlan() {
261-
return Step.chain(new DownHeadStep(), new DeleteDomainStep(), new UnregisterStep());
263+
Step eventStep = null;
264+
if (Optional.ofNullable(eventData).map(e -> e.getItem() != DOMAIN_DELETED).orElse(true)) {
265+
eventStep = EventHelper.createEventStep(new EventHelper.EventData(DOMAIN_DELETED));
266+
}
267+
return Step.chain(eventStep, new DeleteDomainStep(), new UnregisterStatusUpdaterStep(), new UnregisterDPIStep());
262268
}
263269

264-
private class DownHeadStep extends Step {
270+
private class UnregisterStatusUpdaterStep extends Step {
265271

266272
@Override
267273
public NextAction apply(Packet packet) {
@@ -364,19 +370,21 @@ public NextAction onSuccess(Packet packet, CallResponse<DomainResource> callResp
364370
}
365371

366372
private void updateCache(DomainPresenceInfo info, DomainResource domain) {
367-
info.setDeleting(false);
373+
info.setDeleting(domain.getMetadata().getDeletionTimestamp() != null);
368374
info.setDomain(domain);
369375
}
370376

371377
@Override
372378
public NextAction onFailure(Packet packet, CallResponse<DomainResource> callResponse) {
373-
return callResponse.getStatusCode() == HTTP_NOT_FOUND
374-
? doNext(createDomainDownPlan(), packet)
375-
: super.onFailure(packet, callResponse);
379+
if (callResponse.getStatusCode() == HTTP_NOT_FOUND) {
380+
DomainPresenceInfo.fromPacket(packet).ifPresent(i -> i.setDeleting(true));
381+
return doNext(createDomainDownPlan(), packet);
382+
}
383+
return super.onFailure(packet, callResponse);
376384
}
377385
}
378386

379-
private class UnregisterStep extends Step {
387+
private class UnregisterDPIStep extends Step {
380388

381389
@Override
382390
public NextAction apply(Packet packet) {

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import oracle.kubernetes.operator.helpers.CallBuilder;
2828
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
2929
import oracle.kubernetes.operator.helpers.PodHelper;
30-
import oracle.kubernetes.operator.helpers.ResponseStep;
3130
import oracle.kubernetes.operator.helpers.SecretHelper;
3231
import oracle.kubernetes.operator.http.client.HttpAsyncRequestStep;
3332
import oracle.kubernetes.operator.http.client.HttpResponseStep;
@@ -46,7 +45,6 @@
4645
import oracle.kubernetes.weblogic.domain.model.DomainResource;
4746
import oracle.kubernetes.weblogic.domain.model.Shutdown;
4847

49-
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_NOT_FOUND;
5048
import static oracle.kubernetes.operator.KubernetesConstants.WLS_CONTAINER_NAME;
5149
import static oracle.kubernetes.operator.LabelConstants.CLUSTERNAME_LABEL;
5250
import static oracle.kubernetes.operator.WebLogicConstants.ADMIN_STATE;
@@ -398,18 +396,11 @@ void setHttpAsyncRequestStep(HttpAsyncRequestStep requestStep) {
398396
}
399397
}
400398

401-
static class DomainUpdateStep extends ResponseStep<DomainResource> {
399+
static class DomainUpdateStep extends DefaultResponseStep<DomainResource> {
402400
@Override
403401
public NextAction onSuccess(Packet packet, CallResponse<DomainResource> callResponse) {
404402
packet.getSpi(DomainPresenceInfo.class).setDomain(callResponse.getResult());
405403
return doNext(packet);
406404
}
407-
408-
@Override
409-
public NextAction onFailure(Packet packet, CallResponse<DomainResource> callResponse) {
410-
return callResponse.getStatusCode() == HTTP_NOT_FOUND
411-
? doNext(packet)
412-
: super.onFailure(packet, callResponse);
413-
}
414405
}
415406
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,14 +479,17 @@ void whenDomainNotFound_waitForServerShutdownDoesNotRecordKubernetesFailure() {
479479
final DomainResource domain = DomainProcessorTestSetup.createTestDomain();
480480
final AtomicBoolean stopping = new AtomicBoolean(false);
481481
final PodWatcher watcher = createWatcher(stopping);
482-
testSupport.addDomainPresenceInfo(new DomainPresenceInfo(domain));
482+
DomainPresenceInfo info = new DomainPresenceInfo(domain);
483+
testSupport.addDomainPresenceInfo(info);
483484

484485
try {
485486
testSupport.failOnResource(KubernetesTestSupport.DOMAIN, NAME, NS, HTTP_NOT_FOUND);
486487
testSupport.runSteps(watcher.waitForServerShutdown(NAME, domain, terminalStep));
487488
} finally {
488489
stopping.set(true);
489490
}
491+
info.updateLastKnownServerStatus(NAME, SHUTDOWN_STATE);
492+
testSupport.setTime(10, TimeUnit.SECONDS);
490493

491494
assertThat(terminalStep.wasRun(), is(true));
492495
assertThat(domain, not(hasCondition(FAILED).withReason(KUBERNETES)));

0 commit comments

Comments
 (0)