Skip to content

Commit fc5e23e

Browse files
doxiaoalai8
andauthored
Owls104087 (refactored) fix an intermitent failure in ItKubernetesDomainEvents#testK8SEventsDelete (#3704)
* Generate cluster Created/Deleted/Changed events for unreferenced cluster resources Co-authored-by: Anthony Lai <[email protected]>
1 parent 861dfdb commit fc5e23e

22 files changed

+617
-141
lines changed

common/src/main/java/oracle/kubernetes/common/logging/MessageKeys.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ public class MessageKeys {
167167
public static final String WATCH_CLUSTER_DELETED = "WLSKO-0229";
168168
public static final String CLUSTER_STATUS = "WLSKO-0230";
169169
public static final String DOMAIN_INTROSPECTION_INCOMPLETE = "WLSKO-0231";
170+
public static final String WATCH_CLUSTER_WITHOUT_DOMAIN = "WLSKO-0232";
170171

171172
// domain status messages
172173
public static final String MAKE_RIGHT_WILL_RETRY = "WLSDO-0000";

common/src/main/resources/Operator.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ WLSKO-0229=Watch event triggered for deletion of WebLogic Cluster {0} in WebLogi
175175
WLSKO-0230=Status for Cluster Resource with name {0} is now: {1}
176176
WLSKO-0231=Domain introspection is incomplete. \
177177
Check the introspector job logs for possible errors. Job logs are -> {0}.
178+
WLSKO-0232=Watch event triggered for WebLogic Cluster {0}, which is not referenced by any domain.
179+
178180
# Domain status messages
179181

180182
WLSDO-0000={0}. Will retry next at {1} and approximately every {2} seconds afterward until {3} if the failure is not resolved.

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItKubernetesDomainEvents.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ void testDomainK8sEventsScalePastMaxAndChangeIntrospectVersion() {
454454

455455
assertTrue(scaleCluster(clusterRes1Name, domainNamespace3, 2), "failed to scale cluster via patching");
456456
logger.info("verify the ClusterChanged event is generated");
457-
checkEvent(opNamespace, domainNamespace3, domainUid, CLUSTER_CHANGED, "Normal", timestamp);
457+
checkEvent(opNamespace, domainNamespace3, null, CLUSTER_CHANGED, "Normal", timestamp);
458458
checkPodReadyAndServiceExists(adminServerPodName, domainUid, domainNamespace3);
459459

460460
for (int i = 1; i <= replicaCount; i++) {
@@ -662,23 +662,24 @@ void testIncludeServerOutInPodLog() {
662662
}
663663

664664
/**
665-
* Test DomainDeleted event is logged when domain resource is deleted.
665+
* Test DomainDeleted and ClusterDeleted events are logged when domain and cluster resources are deleted.
666666
*/
667667
@Test
668-
@DisplayName("Test domain events for various domain life cycle changes")
668+
@DisplayName("Test domain and cluster events for deleting domain and cluster resources")
669669
void testK8SEventsDelete() {
670670
OffsetDateTime timestamp = now();
671671
createDomain(domainNamespace2, domainUid, pvName2, pvcName2);
672672
deleteDomainCustomResource(domainUid, domainNamespace2);
673673
deleteClusterCustomResource(cluster1Name, domainNamespace2);
674+
674675
checkPodDoesNotExist(adminServerPodName, domainUid, domainNamespace2);
675676
checkPodDoesNotExist(managedServerPodNamePrefix + 1, domainUid, domainNamespace2);
676677
checkPodDoesNotExist(managedServerPodNamePrefix + 2, domainUid, domainNamespace2);
677678

678679
//verify domain deleted event
679680
checkEvent(opNamespace, domainNamespace2, domainUid, DOMAIN_DELETED, "Normal", timestamp);
680681
//verify cluster deleted event
681-
checkEvent(opNamespace, domainNamespace2, domainUid, CLUSTER_DELETED, "Normal", timestamp);
682+
checkEvent(opNamespace, domainNamespace2, null, CLUSTER_DELETED, "Normal", timestamp);
682683
}
683684

684685
/**

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

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
import java.util.stream.Collectors;
1414
import javax.annotation.Nonnull;
1515

16-
import io.kubernetes.client.openapi.models.V1ObjectMeta;
1716
import oracle.kubernetes.common.logging.MessageKeys;
1817
import oracle.kubernetes.operator.calls.CallResponse;
1918
import oracle.kubernetes.operator.calls.UnrecoverableErrorBuilder;
2019
import oracle.kubernetes.operator.helpers.CallBuilder;
2120
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
2221
import oracle.kubernetes.operator.helpers.EventHelper;
22+
import oracle.kubernetes.operator.helpers.EventHelper.ClusterResourceEventData;
2323
import oracle.kubernetes.operator.helpers.EventHelper.EventData;
24-
import oracle.kubernetes.operator.helpers.EventHelper.EventItem;
2524
import oracle.kubernetes.operator.helpers.ResponseStep;
2625
import oracle.kubernetes.operator.logging.LoggingFacade;
2726
import oracle.kubernetes.operator.logging.LoggingFactory;
@@ -226,13 +225,13 @@ private StepAndPacket createReplaceClusterResourceStatusStep() {
226225

227226
// add steps to create events for updating conditions
228227
Optional.ofNullable(newClusterStatus)
229-
.map(ncs -> getClusteStatusConditionEvents(ncs.getConditions())).orElse(Collections.emptyList())
228+
.map(ncs -> getClusterStatusConditionEvents(ncs.getConditions())).orElse(Collections.emptyList())
230229
.stream().map(EventHelper::createClusterResourceEventStep).forEach(result::add);
231230

232231
return new StepAndPacket(Step.chain(result), packet);
233232
}
234233

235-
private List<EventData> getClusteStatusConditionEvents(List<ClusterCondition> conditions) {
234+
private List<EventData> getClusterStatusConditionEvents(List<ClusterCondition> conditions) {
236235
List<EventData> list = new ArrayList<>();
237236
list.addAll(getClusterStatusConditionTrueEvents(conditions));
238237
list.addAll(getClusterStatusConditionFalseEvents(conditions));
@@ -256,14 +255,14 @@ private List<EventData> getClusterStatusConditionTrueEvents(List<ClusterConditio
256255

257256
private EventData toTrueClusterResourceEvent(ClusterCondition condition) {
258257
return Optional.ofNullable(condition.getType().getAddedEvent())
259-
.map(ClusterResourceEventData::new)
258+
.map(eventItem -> new ClusterResourceEventData(eventItem, resource))
260259
.map(this::initializeClusterResourceEventData)
261260
.orElse(null);
262261
}
263262

264263
private EventData toFalseClusterResourceEvent(ClusterCondition removedCondition) {
265264
return Optional.ofNullable(removedCondition.getType().getRemovedEvent())
266-
.map(ClusterResourceEventData::new)
265+
.map(eventItem -> new ClusterResourceEventData(eventItem, resource))
267266
.map(this::initializeClusterResourceEventData)
268267
.orElse(null);
269268
}
@@ -286,21 +285,6 @@ private Step createReplaceClusterStatusAsyncStep() {
286285
createReplacementClusterResource(),
287286
new ClusterResourceStatusReplaceResponseStep(this));
288287
}
289-
290-
private class ClusterResourceEventData extends EventData {
291-
292-
public ClusterResourceEventData(EventItem eventItem) {
293-
super(eventItem);
294-
}
295-
296-
@Override
297-
public String getUID() {
298-
return Optional.of(resource)
299-
.map(ClusterResource::getMetadata)
300-
.map(V1ObjectMeta::getUid)
301-
.orElse("");
302-
}
303-
}
304288
}
305289

306290
private static class ReadClusterResponseStep extends ResponseStep<ClusterResource> {

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,34 @@
1414
import io.kubernetes.client.util.Watch;
1515
import io.kubernetes.client.util.Watch.Response;
1616
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
17+
import oracle.kubernetes.operator.helpers.EventHelper.EventItem;
1718
import oracle.kubernetes.weblogic.domain.model.ClusterResource;
1819
import oracle.kubernetes.weblogic.domain.model.DomainResource;
1920

2021
/**
21-
* An abstraction for processing a domain.
22+
* An abstraction for processing a domain and a cluster.
2223
*/
2324
public interface DomainProcessor {
2425

2526
/**
2627
* Ensures that the domain is up-to-date. This may involve validation and introspection of the domain itself,
2728
* changes to Kubernetes resources such as pods and services.
28-
* @param liveInfo an info object that tracks what is know about the domain
29+
* @param liveInfo an info object that tracks what is known about the domain
2930
* @return Make-right operation
3031
*/
3132
MakeRightDomainOperation createMakeRightOperation(DomainPresenceInfo liveInfo);
3233

34+
/**
35+
* Ensures that a cluster event is generated for a cluster resource no matter whether it is referenced by a domain
36+
* or not.
37+
*
38+
* @param clusterEvent the event that needs to be generated
39+
* @param cluster the cluster resource that the event is associated with
40+
* @return Make-right operation
41+
*/
42+
MakeRightClusterOperation createMakeRightOperationForClusterEvent(
43+
EventItem clusterEvent, ClusterResource cluster);
44+
3345
/**
3446
* Handles a watch event for clusters in the managed namespaces.
3547
* @param item a Kubernetes watch event

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
import javax.annotation.Nonnull;
77

8+
import oracle.kubernetes.operator.helpers.ClusterPresenceInfo;
89
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
10+
import oracle.kubernetes.operator.makeright.MakeRightClusterOperationImpl;
911
import oracle.kubernetes.operator.makeright.MakeRightDomainOperationImpl;
1012
import oracle.kubernetes.operator.work.FiberGate;
1113

@@ -47,4 +49,9 @@ public interface DomainProcessorDelegate extends CoreDelegate {
4749
default MakeRightDomainOperation createMakeRightOperation(MakeRightExecutor executor, DomainPresenceInfo info) {
4850
return new MakeRightDomainOperationImpl(executor, this, info);
4951
}
52+
53+
@Nonnull
54+
default MakeRightClusterOperation createMakeRightOperation(MakeRightExecutor executor, ClusterPresenceInfo info) {
55+
return new MakeRightClusterOperationImpl(executor, this, info);
56+
}
5057
}

0 commit comments

Comments
 (0)