Skip to content

Commit 88e6c1a

Browse files
authored
Backport PR#2707 to resolve issue with rolling completed (#3417)
* Backport PR#2707 to resolve issue with rolling completed
1 parent eb041ac commit 88e6c1a

File tree

4 files changed

+100
-15
lines changed

4 files changed

+100
-15
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.concurrent.Callable;
1919

2020
import io.kubernetes.client.custom.V1Patch;
21+
import io.kubernetes.client.openapi.models.CoreV1Event;
2122
import io.kubernetes.client.openapi.models.V1Container;
2223
import io.kubernetes.client.openapi.models.V1EnvVar;
2324
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
@@ -27,6 +28,7 @@
2728
import io.kubernetes.client.openapi.models.V1SecretReference;
2829
import io.kubernetes.client.openapi.models.V1Volume;
2930
import io.kubernetes.client.openapi.models.V1VolumeMount;
31+
import io.kubernetes.client.util.Yaml;
3032
import oracle.weblogic.domain.AdminServer;
3133
import oracle.weblogic.domain.AdminService;
3234
import oracle.weblogic.domain.Channel;
@@ -92,15 +94,18 @@
9294
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
9395
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.verifyCredentials;
9496
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.verifyServerCommunication;
97+
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.withStandardRetryPolicy;
9598
import static oracle.weblogic.kubernetes.utils.ConfigMapUtils.createConfigMapForDomainCreation;
9699
import static oracle.weblogic.kubernetes.utils.DeployUtil.deployUsingRest;
97100
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
98101
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
99102
import static oracle.weblogic.kubernetes.utils.JobUtils.createDomainJob;
100103
import static oracle.weblogic.kubernetes.utils.JobUtils.getIntrospectJobName;
104+
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_ROLL_COMPLETED;
101105
import static oracle.weblogic.kubernetes.utils.K8sEvents.DOMAIN_ROLL_STARTING;
102106
import static oracle.weblogic.kubernetes.utils.K8sEvents.POD_CYCLE_STARTING;
103107
import static oracle.weblogic.kubernetes.utils.K8sEvents.checkEvent;
108+
import static oracle.weblogic.kubernetes.utils.K8sEvents.getOpGeneratedEvent;
104109
import static oracle.weblogic.kubernetes.utils.OKDUtils.createRouteForOKD;
105110
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
106111
import static oracle.weblogic.kubernetes.utils.PatchDomainUtils.patchDomainResource;
@@ -421,6 +426,19 @@ void testDomainIntrospectVersionRolling() {
421426
"Normal", timestamp, withStandardRetryPolicy);
422427
*/
423428

429+
CoreV1Event event = getOpGeneratedEvent(introDomainNamespace, DOMAIN_ROLL_STARTING, "Normal", timestamp);
430+
logger.info(Yaml.dump(event));
431+
logger.info("verify the event message contains the domain resource changed message");
432+
assertTrue(event.getMessage().contains("resource changed"));
433+
434+
event = getOpGeneratedEvent(introDomainNamespace, POD_CYCLE_STARTING, "Normal", timestamp);
435+
logger.info(Yaml.dump(event));
436+
logger.info("verify the event message contains the property changed in domain resource");
437+
assertTrue(event.getMessage().contains("ADMIN_PORT"));
438+
439+
checkEvent(opNamespace, introDomainNamespace, domainUid, DOMAIN_ROLL_COMPLETED,
440+
"Normal", timestamp, withStandardRetryPolicy);
441+
424442
// verify the admin port is changed to newAdminPort
425443
assertEquals(newAdminPort, assertDoesNotThrow(()
426444
-> getServicePort(introDomainNamespace, getExternalServicePodName(adminServerPodName), "default"),

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

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2018, 2021, Oracle and/or its affiliates.
1+
// Copyright (c) 2018, 2022, 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;
@@ -14,6 +14,7 @@
1414
import java.util.concurrent.TimeUnit;
1515

1616
import io.kubernetes.client.openapi.models.V1Pod;
17+
import oracle.kubernetes.operator.DomainStatusUpdater;
1718
import oracle.kubernetes.operator.ProcessingConstants;
1819
import oracle.kubernetes.operator.logging.LoggingFacade;
1920
import oracle.kubernetes.operator.logging.LoggingFactory;
@@ -144,25 +145,38 @@ public NextAction apply(Packet packet) {
144145
}
145146

146147
if (!work.isEmpty()) {
147-
return doForkJoin(createAfterRollStep(getNext()), packet, work);
148+
return doForkJoin(createAfterRollStep(getNext(), true), packet, work);
148149
}
149-
150150
return doNext(createAfterRollStep(getNext()), packet);
151151
}
152152

153153
private Step createAfterRollStep(Step next) {
154-
return new AfterRollStep(next);
154+
return createAfterRollStep(next, false);
155+
}
156+
157+
private Step createAfterRollStep(Step next, boolean rolled) {
158+
return new AfterRollStep(next, rolled);
155159
}
156160
}
157161

158-
private static class AfterRollStep extends Step {
159-
public AfterRollStep(Step next) {
162+
static class AfterRollStep extends Step {
163+
boolean rolled;
164+
165+
public AfterRollStep(Step next, boolean rolled) {
160166
super(next);
167+
this.rolled = rolled;
161168
}
162169

163170
@Override
164171
public NextAction apply(Packet packet) {
165-
return doNext(createDomainRollCompletedEventStepIfNeeded(getNext(), packet), packet);
172+
return doNext(
173+
rolled
174+
?
175+
createDomainRollCompletedEvent(DomainStatusUpdater.createStatusUpdateStep(getNext()), packet)
176+
:
177+
createDomainRollCompletedEventStepIfNeeded(
178+
DomainStatusUpdater.createStatusUpdateStep(getNext()), packet),
179+
packet);
166180
}
167181

168182
}
@@ -176,14 +190,19 @@ public NextAction apply(Packet packet) {
176190
*/
177191
public static Step createDomainRollCompletedEventStepIfNeeded(Step next, Packet packet) {
178192
if ("true".equals(packet.remove(DOMAIN_ROLL_START_EVENT_GENERATED))) {
179-
LOGGER.info(MessageKeys.DOMAIN_ROLL_COMPLETED, getDomainUid(packet));
180-
return Step.chain(
181-
EventHelper.createEventStep(new EventHelper.EventData(EventHelper.EventItem.DOMAIN_ROLL_COMPLETED)),
182-
next);
193+
return createDomainRollCompletedEvent(next, packet);
183194
}
184195
return next;
185196
}
186197

198+
private static Step createDomainRollCompletedEvent(Step next, Packet packet) {
199+
LOGGER.info(MessageKeys.DOMAIN_ROLL_COMPLETED, getDomainUid(packet));
200+
packet.remove(DOMAIN_ROLL_START_EVENT_GENERATED);
201+
return Step.chain(
202+
EventHelper.createEventStep(new EventHelper.EventData(EventHelper.EventItem.DOMAIN_ROLL_COMPLETED)),
203+
next);
204+
}
205+
187206
private static String getDomainUid(Packet packet) {
188207
return packet.getSpi(DomainPresenceInfo.class).getDomainUid();
189208
}

operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static oracle.kubernetes.operator.WebLogicConstants.RUNNING_STATE;
3333
import static oracle.kubernetes.operator.helpers.DomainIntrospectorJobTest.TEST_VOLUME_NAME;
3434
import static oracle.kubernetes.operator.helpers.DomainStatusMatcher.hasStatus;
35+
import static oracle.kubernetes.operator.helpers.EventHelper.EventItem.DOMAIN_ROLL_COMPLETED;
3536
import static oracle.kubernetes.operator.helpers.EventHelper.EventItem.POD_CYCLE_STARTING;
3637
import static oracle.kubernetes.operator.helpers.Matchers.hasContainer;
3738
import static oracle.kubernetes.operator.helpers.Matchers.hasEnvVar;
@@ -826,6 +827,24 @@ void whenDomainHomeChanged_podCycleEventCreatedWithCorrectNS()
826827
assertContainsEventWithNamespace(POD_CYCLE_STARTING, NS);
827828
}
828829

830+
@Test
831+
void whenDomainHomeChanged_andRunAfterUpStep_domainRollCompletedEventCreatedWithCorrectMessage()
832+
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
833+
initializeExistingPod();
834+
getConfiguredDomainSpec().setDomainHome("adfgg");
835+
836+
testSupport.runSteps(getStepFactory(), Step.chain(getAfterUpStep(), terminalStep));
837+
logRecords.clear();
838+
839+
assertThat("Expected Event " + DOMAIN_ROLL_COMPLETED + " expected with message not found",
840+
getExpectedEventMessage(DOMAIN_ROLL_COMPLETED),
841+
stringContainsInOrder("Rolling restart of domain", UID, " completed"));
842+
}
843+
844+
Step getAfterUpStep() {
845+
return new RollingHelper.AfterRollStep(null, false);
846+
}
847+
829848
@Test
830849
void whenDomainHomeChanged_generateExpectedLogMessage()
831850
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {

operator/src/test/java/oracle/kubernetes/operator/helpers/RollingHelperTest.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020, 2021, Oracle and/or its affiliates.
1+
// Copyright (c) 2020, 2022, 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;
@@ -222,10 +222,9 @@ void verifyThatWhenRollingIsEmpty_NoManagedServerPodsAreReplaced() {
222222
}
223223

224224
@Test
225-
void afterRoll_domainRollCompletedEventCreated() {
225+
void whenRoll_domainRollCompletedEventCreated() {
226226
initializeExistingPods();
227227
testSupport.addToPacket(SERVERS_TO_ROLL, rolling);
228-
testSupport.addToPacket(DOMAIN_ROLL_START_EVENT_GENERATED, "true");
229228
SERVER_NAMES.forEach(s ->
230229
rolling.put(s, createRollingStepAndPacket(modifyRestartVersion(createPodModel(s), "V10"), s)));
231230

@@ -235,6 +234,17 @@ void afterRoll_domainRollCompletedEventCreated() {
235234
assertContainsEventWithMessage(DOMAIN_ROLL_COMPLETED, UID);
236235
}
237236

237+
@Test
238+
void whenNoRoll_withDomainRollStartFlag_domainRollCompletedEventCreated() {
239+
initializeExistingPods();
240+
testSupport.addToPacket(DOMAIN_ROLL_START_EVENT_GENERATED, "true");
241+
242+
testSupport.runSteps(RollingHelper.rollServers(rolling, terminalStep));
243+
logRecords.clear();
244+
245+
assertContainsEventWithMessage(DOMAIN_ROLL_COMPLETED, UID);
246+
}
247+
238248
@Test
239249
void afterRoll_expectedLogMessageFound() {
240250
initializeExistingPods();
@@ -266,9 +276,28 @@ void whenRolling_podCycleEventCreatedWithCorrectMessage() {
266276
logRecords.clear();
267277

268278
SERVER_NAMES.forEach(s -> assertThat(
269-
"Expected Event " + DOMAIN_ROLL_STARTING + " expected with message not found",
279+
"Expected Event " + POD_CYCLE_STARTING + " expected with message not found",
270280
getExpectedEventMessage(POD_CYCLE_STARTING, getPodName(s), NS),
271281
stringContainsInOrder("Replacing ", getPodName(s), "domain restart version changed")));
282+
assertThat("Expected Event " + DOMAIN_ROLL_COMPLETED + " expected with message not found",
283+
getExpectedEventMessage(DOMAIN_ROLL_COMPLETED, UID, NS),
284+
stringContainsInOrder("Rolling restart of domain", UID, "completed"));
285+
}
286+
287+
@Test
288+
void whenRolling_domainRollCompletedEventCreatedWithCorrectMessage() {
289+
initializeExistingPods();
290+
testSupport.addToPacket(SERVERS_TO_ROLL, rolling);
291+
testSupport.addToPacket(DOMAIN_ROLL_START_EVENT_GENERATED, "true");
292+
SERVER_NAMES.forEach(s ->
293+
rolling.put(s, createRollingStepAndPacket(modifyRestartVersion(createPodModel(s), "V3"), s)));
294+
295+
testSupport.runSteps(RollingHelper.rollServers(rolling, terminalStep));
296+
logRecords.clear();
297+
298+
assertThat("Expected Event " + DOMAIN_ROLL_COMPLETED + " expected with message not found",
299+
getExpectedEventMessage(DOMAIN_ROLL_COMPLETED, UID, NS),
300+
stringContainsInOrder("Rolling restart of domain", UID, "completed"));
272301
}
273302

274303
@Test

0 commit comments

Comments
 (0)