Skip to content

Commit 229229b

Browse files
authored
OWLS-107005 correct Failed condition handling at the async request processing layer (#4030)
* Correct Failed condition handling at the async request processing layer
1 parent dfa7f7f commit 229229b

File tree

4 files changed

+31
-17
lines changed

4 files changed

+31
-17
lines changed

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

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import oracle.kubernetes.operator.work.NextAction;
2929
import oracle.kubernetes.operator.work.Packet;
3030
import oracle.kubernetes.operator.work.Step;
31-
import oracle.kubernetes.operator.work.Step.StepAndPacket;
3231
import oracle.kubernetes.weblogic.domain.model.ClusterCondition;
3332
import oracle.kubernetes.weblogic.domain.model.ClusterResource;
3433
import oracle.kubernetes.weblogic.domain.model.ClusterStatus;
@@ -59,15 +58,6 @@ public static Step createClusterResourceStatusUpdaterStep(Step next) {
5958
return new ClusterResourceStatusUpdaterStep(next);
6059
}
6160

62-
private static Step createUpdateClusterResourceStatusSteps(Packet packet,
63-
Collection<ClusterResource> clusterResources) {
64-
List<StepAndPacket> result = clusterResources.stream()
65-
.filter(res -> createContext(packet, res).isClusterResourceStatusChanged())
66-
.map(res -> createContext(packet, res).createReplaceClusterResourceStatusStep()).collect(
67-
Collectors.toList());
68-
return result.isEmpty() ? null : new RunInParallelStep(result);
69-
}
70-
7161
private static ReplaceClusterStatusContext createContext(Packet packet, ClusterResource resource) {
7262
return new ReplaceClusterStatusContext(packet, resource);
7363
}
@@ -93,6 +83,15 @@ public NextAction apply(Packet packet) {
9383
return doNext(chainStep(step, getNext()), packet);
9484
}
9585

86+
private static Step createUpdateClusterResourceStatusSteps(Packet packet,
87+
Collection<ClusterResource> clusterResources) {
88+
List<StepAndPacket> result = clusterResources.stream()
89+
.filter(res -> createContext(packet, res).isClusterResourceStatusChanged())
90+
.map(res -> new StepAndPacket(createContext(packet, res).createReplaceClusterResourceStatusStep(), packet))
91+
.collect(Collectors.toList());
92+
return result.isEmpty() ? null : new RunInParallelStep(result);
93+
}
94+
9695
private static Step chainStep(Step one, Step two) {
9796
if (one == null) {
9897
return two;
@@ -210,7 +209,7 @@ boolean isClusterResourceStatusChanged() {
210209
return !Objects.equals(getNewStatus(), resource.getStatus());
211210
}
212211

213-
private StepAndPacket createReplaceClusterResourceStatusStep() {
212+
private Step createReplaceClusterResourceStatusStep() {
214213
LOGGER.fine(MessageKeys.CLUSTER_STATUS, getClusterResourceName(),
215214
getNewStatus());
216215

@@ -229,7 +228,7 @@ private StepAndPacket createReplaceClusterResourceStatusStep() {
229228
.map(ncs -> getClusterStatusConditionEvents(ncs.getConditions())).orElse(Collections.emptyList())
230229
.stream().map(EventHelper::createClusterResourceEventStep).forEach(result::add);
231230

232-
return new StepAndPacket(Step.chain(result), packet);
231+
return Step.chain(result);
233232
}
234233

235234
private List<EventData> getClusterStatusConditionEvents(List<ClusterCondition> conditions) {
@@ -317,7 +316,7 @@ public NextAction apply(Packet packet) {
317316
// Get the ClusterResource, that was refreshed, from DomainPresenceInfo.
318317
DomainPresenceInfo info = DomainPresenceInfo.fromPacket(packet).orElseThrow();
319318
ClusterResource res = info.getClusterResource(clusterName);
320-
return doNext(createUpdateClusterResourceStatusSteps(packet, Collections.singletonList(res)), packet);
319+
return doNext(createContext(packet, res).createReplaceClusterResourceStatusStep(), packet);
321320
}
322321
}
323322
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,11 @@ class Conditions {
765765
public Conditions(DomainStatus status) {
766766
this.status = status != null ? status : new DomainStatus();
767767
this.clusterChecks = createClusterChecks();
768-
conditionList.add(new DomainCondition(COMPLETED).withStatus(isProcessingCompleted()));
768+
boolean isCompleted = isProcessingCompleted();
769+
conditionList.add(new DomainCondition(COMPLETED).withStatus(isCompleted));
770+
if (isCompleted && this.status.hasConditionWithType(FAILED)) {
771+
this.status.removeConditionsWithType(FAILED);
772+
}
769773
conditionList.add(createAvailableCondition());
770774
if (allIntendedServersReady()) {
771775
this.status.removeConditionsWithType(ROLLING);

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2018, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2018, 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.helpers;
@@ -26,6 +26,7 @@
2626
import oracle.kubernetes.weblogic.domain.model.DomainCondition;
2727
import oracle.kubernetes.weblogic.domain.model.DomainResource;
2828

29+
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_CONFLICT;
2930
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_FORBIDDEN;
3031
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_NOT_FOUND;
3132
import static oracle.kubernetes.operator.KubernetesConstants.HTTP_UNAUTHORIZED;
@@ -177,7 +178,9 @@ private NextAction doPotentialRetry(Step conflictStep, Packet packet, CallRespon
177178
}
178179

179180
private NextAction logNoRetry(Packet packet, CallResponse<T> callResponse) {
180-
if ((callResponse != null) && (callResponse.getStatusCode() != HTTP_NOT_FOUND)) {
181+
if ((callResponse != null)
182+
&& (callResponse.getStatusCode() != HTTP_NOT_FOUND)
183+
&& (callResponse.getStatusCode() != HTTP_CONFLICT)) {
181184
addDomainFailureStatus(packet, callResponse.getRequestParams(), callResponse.getE());
182185
if (LOGGER.isWarningEnabled()) {
183186
LOGGER.warning(

operator/src/test/java/oracle/kubernetes/operator/calls/AsyncRequestStepTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2018, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2018, 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.calls;
@@ -196,6 +196,14 @@ void afterFailedCallback_failedStatusConditionSet() {
196196
));
197197
}
198198

199+
@Test
200+
void afterFailedCallback409_failedStatusConditionNotSet() {
201+
testSupport.addDomainPresenceInfo(info);
202+
sendFailedCallback(HttpURLConnection.HTTP_CONFLICT);
203+
204+
assertThat(domain.getStatus().hasConditionWithType(FAILED), is(false));
205+
}
206+
199207
@Test
200208
void whenDomainStatusIsNull_ignoreSuccess() {
201209
assertDoesNotThrow(() -> {

0 commit comments

Comments
 (0)