Skip to content

Commit fa7c604

Browse files
alai8rjeberhard
authored andcommitted
ignore delete domain watches with old creationTimestamp
1 parent 88ff8b9 commit fa7c604

File tree

2 files changed

+68
-4
lines changed

2 files changed

+68
-4
lines changed

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import oracle.kubernetes.weblogic.domain.v1.Domain;
8080
import oracle.kubernetes.weblogic.domain.v1.DomainList;
8181
import oracle.kubernetes.weblogic.domain.v1.DomainSpec;
82+
import org.joda.time.DateTime;
8283

8384
/** A Kubernetes Operator for WebLogic. */
8485
public class Main {
@@ -307,7 +308,7 @@ static void deleteStrandedResources() {
307308
String domainUID = entry.getKey();
308309
DomainPresenceInfo info = entry.getValue();
309310
if (info != null && info.getDomain() == null) {
310-
deleteDomainPresence(info.getNamespace(), domainUID);
311+
deleteDomainPresence(info.getNamespace(), domainUID, null);
311312
}
312313
}
313314
}
@@ -699,14 +700,36 @@ private static void deleteDomainPresence(Domain dom) {
699700

700701
String domainUID = spec.getDomainUID();
701702

702-
deleteDomainPresence(namespace, domainUID);
703+
deleteDomainPresence(namespace, domainUID, meta.getCreationTimestamp());
703704
}
704705

705-
private static void deleteDomainPresence(String namespace, String domainUID) {
706+
private static DateTime getDomainCreationTimeStamp(DomainPresenceInfo domainPresenceInfo) {
707+
if (domainPresenceInfo != null
708+
&& domainPresenceInfo.getDomain() != null
709+
&& domainPresenceInfo.getDomain().getMetadata() != null) {
710+
return domainPresenceInfo.getDomain().getMetadata().getCreationTimestamp();
711+
}
712+
return null;
713+
}
714+
715+
private static void deleteDomainPresence(
716+
String namespace, String domainUID, DateTime deleteDomainDateTime) {
706717
LOGGER.entering();
707718

708-
DomainPresenceInfo info = DomainPresenceInfoManager.remove(domainUID);
719+
DomainPresenceInfo info = DomainPresenceInfoManager.lookup(domainUID);
709720
if (info != null) {
721+
DateTime infoDateTime = getDomainCreationTimeStamp(info);
722+
if (infoDateTime != null
723+
&& deleteDomainDateTime != null
724+
&& deleteDomainDateTime.isBefore(infoDateTime)) {
725+
LOGGER.exiting("Domain to be deleted is too old");
726+
return;
727+
}
728+
info = DomainPresenceInfoManager.remove(domainUID);
729+
if (info == null) {
730+
LOGGER.exiting("Domain already deleted by another Fiber");
731+
return;
732+
}
710733
DomainPresenceControl.cancelDomainStatusUpdating(info);
711734
}
712735
FIBER_GATE.startFiber(

operator/src/test/java/oracle/kubernetes/operator/wlsconfig/WlsRetrieverTest.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,26 @@
1212

1313
import com.meterware.simplestub.Memento;
1414
import com.meterware.simplestub.Stub;
15+
import io.kubernetes.client.models.V1ObjectMeta;
1516
import io.kubernetes.client.models.V1Service;
1617
import java.util.ArrayList;
1718
import java.util.List;
1819
import java.util.logging.Level;
1920
import java.util.logging.LogRecord;
2021
import oracle.kubernetes.TestUtils;
2122
import oracle.kubernetes.operator.ProcessingConstants;
23+
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
24+
import oracle.kubernetes.operator.helpers.DomainPresenceInfoManager;
25+
import oracle.kubernetes.operator.helpers.ServerKubernetesObjectsManager;
2226
import oracle.kubernetes.operator.http.HttpClient;
2327
import oracle.kubernetes.operator.wlsconfig.WlsRetriever.RequestType;
2428
import oracle.kubernetes.operator.wlsconfig.WlsRetriever.WithHttpClientStep;
29+
import oracle.kubernetes.operator.work.Component;
2530
import oracle.kubernetes.operator.work.NextAction;
2631
import oracle.kubernetes.operator.work.Packet;
2732
import oracle.kubernetes.operator.work.Step;
33+
import oracle.kubernetes.weblogic.domain.v1.Domain;
34+
import oracle.kubernetes.weblogic.domain.v1.DomainSpec;
2835
import org.junit.After;
2936
import org.junit.Before;
3037
import org.junit.Test;
@@ -105,6 +112,34 @@ public void withHttpClientStep_Health_nologIfFailedOnRetry() {
105112
assert (logRecords.isEmpty());
106113
}
107114

115+
@Test(expected = IllegalArgumentException.class)
116+
public void WithHttpClientStep_const_throws_with_null_service() {
117+
Step next = new MockStep(null);
118+
new WithHttpClientStep(RequestType.HEALTH, null, next);
119+
}
120+
121+
// @Test (expected =IllegalArgumentException.class)
122+
public void ReadStep_apply_throws_with_null_service() {
123+
final String SERVER_NAME = "managed-server1";
124+
final String DOMAIN_UID = "testDomain";
125+
Step next = new MockStep(null);
126+
DomainSpec domainSpec = new DomainSpec();
127+
domainSpec.setDomainUID(DOMAIN_UID);
128+
Domain domain =
129+
new Domain()
130+
.withSpec(domainSpec)
131+
.withMetadata(new V1ObjectMeta().namespace("testnamespace"));
132+
DomainPresenceInfo domainPresenceInfo = DomainPresenceInfoManager.getOrCreate(domain);
133+
ServerKubernetesObjectsManager.getOrCreate(domainPresenceInfo, DOMAIN_UID, SERVER_NAME);
134+
Packet packet =
135+
Stub.createStub(PacketStub.class)
136+
.addSpi(DomainPresenceInfo.class, domainPresenceInfo)
137+
.withServerName(SERVER_NAME);
138+
139+
Step readStep = WlsRetriever.readHealthStep(next);
140+
readStep.apply(packet);
141+
}
142+
108143
abstract static class PacketStub extends Packet {
109144

110145
Integer retryCount;
@@ -120,6 +155,12 @@ PacketStub withServerName(String serverName) {
120155
return this;
121156
}
122157

158+
PacketStub addSpi(Class clazz, Object spiObject) {
159+
Component component = Component.createFor(spiObject);
160+
this.getComponents().put(clazz.getName(), component);
161+
return this;
162+
}
163+
123164
@Override
124165
public Object get(Object key) {
125166
if (HttpClient.KEY.equals(key)) {

0 commit comments

Comments
 (0)