Skip to content

Commit ff604f3

Browse files
authored
Don't remove other conditions when adding ConfigChangesPendingRestart (#2447)
1 parent 35de126 commit ff604f3

File tree

3 files changed

+38
-55
lines changed

3 files changed

+38
-55
lines changed

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/DomainConditionType.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,8 @@ DomainConditionType[] typesToRemove() {
1313
Available,
1414
ConfigChangesPendingRestart {
1515
@Override
16-
String getStatusMessage(DomainCondition condition) {
17-
return condition.getMessage();
18-
}
19-
20-
@Override
21-
String getStatusReason(DomainCondition condition) {
22-
return condition.getReason();
16+
DomainConditionType[] typesToRemove() {
17+
return new DomainConditionType[] {};
2318
}
2419
},
2520
Failed {
@@ -34,19 +29,15 @@ String getStatusReason(DomainCondition condition) {
3429
}
3530

3631
@Override
37-
DomainConditionType[] typesToRemoveAlways() {
38-
return new DomainConditionType[] {Progressing};
32+
DomainConditionType[] typesToRemove() {
33+
return new DomainConditionType[] {Progressing, Available};
3934
}
4035
};
4136

4237
DomainConditionType[] typesToRemove() {
4338
return new DomainConditionType[] {Progressing, Available, Failed};
4439
}
4540

46-
DomainConditionType[] typesToRemoveAlways() {
47-
return new DomainConditionType[] {};
48-
}
49-
5041
String getStatusMessage(DomainCondition condition) {
5142
return null;
5243
}

operator/src/main/java/oracle/kubernetes/weblogic/domain/model/DomainStatus.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.time.OffsetDateTime;
77
import java.util.ArrayList;
8+
import java.util.Arrays;
89
import java.util.Collections;
910
import java.util.Comparator;
1011
import java.util.HashSet;
@@ -116,28 +117,24 @@ public DomainStatus(DomainStatus that) {
116117
*/
117118
public DomainStatus addCondition(DomainCondition newCondition) {
118119
if (conditions.contains(newCondition)) {
119-
conditions = conditions.stream()
120-
.filter(c -> preserve(c, newCondition.getType().typesToRemoveAlways())).collect(Collectors.toList());
121120
return this;
122121
}
123122

124-
conditions = conditions.stream()
125-
.filter(c -> preserve(c, newCondition.getType().typesToRemove())).collect(Collectors.toList());
123+
conditions = conditions.stream().filter(c -> preserve(c, newCondition.getType())).collect(Collectors.toList());
126124

127125
conditions.add(newCondition);
128126
reason = newCondition.getStatusReason();
129127
message = newCondition.getStatusMessage();
130128
return this;
131129
}
132130

133-
private boolean preserve(DomainCondition condition, DomainConditionType[] types) {
134-
for (DomainConditionType type : types) {
135-
if (condition.getType() == type) {
136-
return false;
137-
}
131+
// Returns true if adding a condition of the new type should not remove the specified condition.
132+
private boolean preserve(DomainCondition condition, DomainConditionType newType) {
133+
if (newType == condition.getType() && !"True".equalsIgnoreCase(condition.getStatus())) {
134+
return false;
135+
} else {
136+
return !Arrays.asList(newType.typesToRemove()).contains(condition.getType());
138137
}
139-
140-
return true;
141138
}
142139

143140
/**

operator/src/test/java/oracle/kubernetes/weblogic/domain/model/DomainStatusTest.java

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static oracle.kubernetes.operator.WebLogicConstants.SHUTDOWN_STATE;
1919
import static oracle.kubernetes.weblogic.domain.model.DomainConditionMatcher.hasCondition;
2020
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.Available;
21+
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.ConfigChangesPendingRestart;
2122
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.Failed;
2223
import static oracle.kubernetes.weblogic.domain.model.DomainConditionType.Progressing;
2324
import static oracle.kubernetes.weblogic.domain.model.DomainStatusTest.ClusterStatusMatcher.clusterStatus;
@@ -64,38 +65,12 @@ public void whenAddedConditionEqualsPresentCondition_ignoreIt() {
6465
}
6566

6667
@Test
67-
public void whenAddedConditionProgressing_addedItWithoutRemovingFailed() {
68-
DomainCondition originalCondition1 = new DomainCondition(Failed).withStatus("True");
69-
domainStatus.addCondition(originalCondition1);
70-
DomainCondition originalCondition2 = new DomainCondition(Progressing).withStatus("True");
71-
domainStatus.addCondition(originalCondition2);
68+
public void whenAddedConditionIsFailed_retainOldFailedCondition() {
69+
domainStatus.addCondition(new DomainCondition(Failed).withStatus("True").withMessage("problem 1"));
70+
domainStatus.addCondition(new DomainCondition(Failed).withStatus("True").withMessage("problem 2"));
7271

73-
assertThat(domainStatus.getConditionWithType(Failed), sameInstance(originalCondition1));
74-
assertThat(domainStatus.getConditionWithType(Progressing), sameInstance(originalCondition2));
75-
}
76-
77-
@Test
78-
public void whenAddedConditionFailed_removeProgressingCondition() {
79-
DomainCondition originalCondition1 = new DomainCondition(Failed).withStatus("True");
80-
domainStatus.addCondition(originalCondition1);
81-
DomainCondition originalCondition2 = new DomainCondition(Progressing).withStatus("True");
82-
domainStatus.addCondition(originalCondition2);
83-
84-
SystemClockTestSupport.increment();
85-
domainStatus.addCondition(new DomainCondition(Failed).withStatus("True"));
86-
87-
assertThat(domainStatus.getConditionWithType(Failed), sameInstance(originalCondition1));
88-
assertThat(domainStatus.getConditionWithType(Progressing), is(nullValue()));
89-
}
90-
91-
@Test
92-
public void whenAddedConditionIsFailed_replaceOldFailedCondition() {
93-
domainStatus.addCondition(new DomainCondition(Failed).withStatus("False"));
94-
95-
domainStatus.addCondition(new DomainCondition(Failed).withStatus("True"));
96-
97-
assertThat(domainStatus, hasCondition(Failed).withStatus("True"));
98-
assertThat(domainStatus, not(hasCondition(Failed).withStatus("False")));
72+
assertThat(domainStatus, hasCondition(Failed).withMessage("problem 1"));
73+
assertThat(domainStatus, hasCondition(Failed).withMessage("problem 2"));
9974
}
10075

10176
@Test
@@ -178,6 +153,26 @@ public void whenAddedConditionIsProgress_doNotRmoveExistedFailedCondition() {
178153
assertThat(domainStatus, hasCondition(Progressing).withStatus("True"));
179154
}
180155

156+
@Test
157+
public void whenAddedConditionIsConfigChangesPending_doNotRemoveExistingFailedCondition() {
158+
domainStatus.addCondition(new DomainCondition(Failed).withStatus("True"));
159+
160+
domainStatus.addCondition(new DomainCondition(ConfigChangesPendingRestart).withStatus("True"));
161+
162+
assertThat(domainStatus, hasCondition(Failed));
163+
assertThat(domainStatus, hasCondition(ConfigChangesPendingRestart));
164+
}
165+
166+
@Test
167+
public void whenAddedConditionIsConfigChangesPending_doNotRemoveExistingAvailableCondition() {
168+
domainStatus.addCondition(new DomainCondition(Available));
169+
170+
domainStatus.addCondition(new DomainCondition(ConfigChangesPendingRestart).withStatus("True"));
171+
172+
assertThat(domainStatus, hasCondition(Available));
173+
assertThat(domainStatus, hasCondition(ConfigChangesPendingRestart));
174+
}
175+
181176
@Test
182177
public void beforeConditionAdded_statusFailsPredicate() {
183178
assertThat(domainStatus.hasConditionWith(c -> c.hasType(Available)), is(false));

0 commit comments

Comments
 (0)