Skip to content

Commit b56a95f

Browse files
committed
Rolling fixes
1 parent 1d62522 commit b56a95f

File tree

7 files changed

+98
-83
lines changed

7 files changed

+98
-83
lines changed

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

Lines changed: 0 additions & 32 deletions
This file was deleted.

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -487,11 +487,6 @@ public void makeRightDomainPresence(
487487
boolean isDeleting,
488488
boolean isWillInterrupt) {
489489
Domain domain = info.getDomain();
490-
DomainSpec spec = null;
491-
if (domain != null) {
492-
spec = domain.getSpec();
493-
DomainPresenceControl.normalizeDomainSpec(spec);
494-
}
495490
String ns = info.getNamespace();
496491
String domainUid = info.getDomainUid();
497492

@@ -513,6 +508,7 @@ public void makeRightDomainPresence(
513508
// change just by looking at metadata.generation.
514509

515510
// Has the spec actually changed? We will get watch events for status updates
511+
DomainSpec spec = domain != null ? domain.getSpec() : null;
516512
if (!explicitRecheck && spec != null && spec.equals(current.getSpec())) {
517513
// nothing in the spec has changed, but status likely did; update current
518514
existing.setDomain(domain);

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

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55

66
import java.util.ArrayList;
77
import java.util.Collection;
8-
import java.util.Collections;
98
import java.util.HashMap;
109
import java.util.List;
1110
import java.util.Map;
11+
import java.util.Optional;
1212
import java.util.Queue;
1313
import java.util.concurrent.ConcurrentLinkedQueue;
14+
import java.util.concurrent.TimeUnit;
1415

1516
import io.kubernetes.client.openapi.models.V1Pod;
1617
import oracle.kubernetes.operator.ProcessingConstants;
@@ -35,6 +36,7 @@
3536
*/
3637
public class RollingHelper {
3738
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
39+
private static long DELAY_IN_SECONDS = 10;
3840

3941
private RollingHelper() {
4042
}
@@ -208,31 +210,20 @@ public NextAction apply(Packet packet) {
208210

209211
LOGGER.info(MessageKeys.ROLLING_SERVERS, dom.getDomainUid(), servers, readyServers);
210212

211-
int countToRestartNow = Math.max(1, countReady - dom.getMinAvailable(clusterName));
213+
int countToRestartNow = countReady - dom.getMinAvailable(clusterName);
212214
Collection<StepAndPacket> restarts = new ArrayList<>();
213215
for (int i = 0; i < countToRestartNow; i++) {
214-
restarts.add(new StepAndPacket(new RestartOneClusteredServerStep(servers, null), packet));
216+
Optional.ofNullable(servers.poll())
217+
.ifPresent(serverToRestart -> restarts.add(serverToRestart));
215218
}
216-
return doForkJoin(getNext(), packet, restarts);
217-
}
218-
}
219-
220-
private static class RestartOneClusteredServerStep extends Step {
221-
private final Queue<StepAndPacket> servers;
222-
223-
public RestartOneClusteredServerStep(Queue<StepAndPacket> servers, Step next) {
224-
super(next);
225-
this.servers = servers;
226-
}
227219

228-
@Override
229-
public NextAction apply(Packet packet) {
230-
StepAndPacket serverToRestart = servers.poll();
231-
if (serverToRestart != null) {
232-
Collection<StepAndPacket> col = Collections.singleton(serverToRestart);
233-
return doForkJoin(this, packet, col);
220+
if (!restarts.isEmpty()) {
221+
return doForkJoin(this, packet, restarts);
222+
} else if (!servers.isEmpty()) {
223+
return doDelay(this, packet, DELAY_IN_SECONDS, TimeUnit.SECONDS);
224+
} else {
225+
return doNext(packet);
234226
}
235-
return doNext(packet);
236227
}
237228
}
238-
}
229+
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@
2727
import org.apache.commons.lang3.builder.HashCodeBuilder;
2828
import org.apache.commons.lang3.builder.ToStringBuilder;
2929

30+
import static oracle.kubernetes.operator.KubernetesConstants.ALWAYS_IMAGEPULLPOLICY;
3031
import static oracle.kubernetes.operator.KubernetesConstants.DEFAULT_ALLOW_REPLICAS_BELOW_MIN_DYN_CLUSTER_SIZE;
32+
import static oracle.kubernetes.operator.KubernetesConstants.DEFAULT_IMAGE;
33+
import static oracle.kubernetes.operator.KubernetesConstants.IFNOTPRESENT_IMAGEPULLPOLICY;
3134

3235
/** DomainSpec is a description of a domain. */
3336
@Description("DomainSpec is a description of a domain.")
@@ -338,9 +341,8 @@ public DomainSpec withWebLogicCredentialsSecret(V1SecretReference webLogicCreden
338341
return this;
339342
}
340343

341-
@Nullable
342344
public String getImage() {
343-
return image;
345+
return Optional.ofNullable(image).orElse(DEFAULT_IMAGE);
344346
}
345347

346348
public void setImage(@Nullable String image) {
@@ -349,7 +351,15 @@ public void setImage(@Nullable String image) {
349351

350352
@Nullable
351353
public String getImagePullPolicy() {
352-
return imagePullPolicy;
354+
return Optional.ofNullable(imagePullPolicy).orElse(getInferredPullPolicy());
355+
}
356+
357+
private String getInferredPullPolicy() {
358+
return useLatestImage() ? ALWAYS_IMAGEPULLPOLICY : IFNOTPRESENT_IMAGEPULLPOLICY;
359+
}
360+
361+
private boolean useLatestImage() {
362+
return getImage().endsWith(KubernetesConstants.LATEST_IMAGE_SUFFIX);
353363
}
354364

355365
public void setImagePullPolicy(@Nullable String imagePullPolicy) {
@@ -639,8 +649,8 @@ public boolean equals(Object other) {
639649
.append(domainHomeInImage, rhs.domainHomeInImage)
640650
.append(serverStartPolicy, rhs.serverStartPolicy)
641651
.append(webLogicCredentialsSecret, rhs.webLogicCredentialsSecret)
642-
.append(image, rhs.image)
643-
.append(imagePullPolicy, rhs.imagePullPolicy)
652+
.append(getImage(), rhs.getImage())
653+
.append(getImagePullPolicy(), rhs.getImagePullPolicy())
644654
.append(imagePullSecrets, rhs.imagePullSecrets)
645655
.append(adminServer, rhs.adminServer)
646656
.append(managedServers, rhs.managedServers)

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

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.Collections;
77
import java.util.List;
88
import java.util.Map;
9-
import java.util.Optional;
109
import javax.annotation.Nonnull;
1110

1211
import io.kubernetes.client.openapi.models.V1Affinity;
@@ -16,15 +15,10 @@
1615
import io.kubernetes.client.openapi.models.V1ResourceRequirements;
1716
import io.kubernetes.client.openapi.models.V1SecurityContext;
1817
import io.kubernetes.client.openapi.models.V1Toleration;
19-
import oracle.kubernetes.operator.KubernetesConstants;
2018
import org.apache.commons.lang3.builder.EqualsBuilder;
2119
import org.apache.commons.lang3.builder.HashCodeBuilder;
2220
import org.apache.commons.lang3.builder.ToStringBuilder;
2321

24-
import static oracle.kubernetes.operator.KubernetesConstants.ALWAYS_IMAGEPULLPOLICY;
25-
import static oracle.kubernetes.operator.KubernetesConstants.DEFAULT_IMAGE;
26-
import static oracle.kubernetes.operator.KubernetesConstants.IFNOTPRESENT_IMAGEPULLPOLICY;
27-
2822
/** Represents the effective configuration for a server, as seen by the operator runtime. */
2923
@SuppressWarnings("WeakerAccess")
3024
public abstract class ServerSpecBase implements ServerSpec {
@@ -37,26 +31,14 @@ public ServerSpecBase(DomainSpec domainSpec) {
3731

3832
@Override
3933
public String getImage() {
40-
return Optional.ofNullable(domainSpec.getImage()).orElse(DEFAULT_IMAGE);
34+
return domainSpec.getImage();
4135
}
4236

4337
@Override
4438
public String getImagePullPolicy() {
45-
return Optional.ofNullable(getConfiguredImagePullPolicy()).orElse(getInferredPullPolicy());
46-
}
47-
48-
protected String getConfiguredImagePullPolicy() {
4939
return domainSpec.getImagePullPolicy();
5040
}
5141

52-
private String getInferredPullPolicy() {
53-
return useLatestImage() ? ALWAYS_IMAGEPULLPOLICY : IFNOTPRESENT_IMAGEPULLPOLICY;
54-
}
55-
56-
private boolean useLatestImage() {
57-
return getImage().endsWith(KubernetesConstants.LATEST_IMAGE_SUFFIX);
58-
}
59-
6042
@Override
6143
public List<V1LocalObjectReference> getImagePullSecrets() {
6244
return domainSpec.getImagePullSecrets();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public void setUp() throws Exception {
8989
configSupport.addWlsServer(ADMIN_SERVER, ADMIN_PORT);
9090
configSupport.setAdminServerName(ADMIN_SERVER);
9191
SERVER_NAMES.forEach(s -> configSupport.addWlsServer(s, LISTEN_PORT));
92+
configSupport.addWlsCluster(CLUSTER_NAME, SERVER10_NAME, SERVER1_NAME, SERVER2_NAME);
9293

9394
testSupport.defineResources(domain);
9495
domainTopology = configSupport.createDomainConfig();
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright (c) 2020, Oracle Corporation and/or its affiliates.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
3+
4+
package oracle.kubernetes.weblogic.domain.model;
5+
6+
import oracle.kubernetes.operator.KubernetesConstants;
7+
import org.junit.Test;
8+
9+
import static org.hamcrest.Matchers.equalTo;
10+
import static org.hamcrest.Matchers.not;
11+
import static org.hamcrest.junit.MatcherAssert.assertThat;
12+
13+
public class DomainSpecTest {
14+
15+
@Test
16+
public void whenEffectiveDomainSpecsWithDefaultImage_domainSpecEquals() {
17+
DomainSpec spec1 = new DomainSpec().withImage(KubernetesConstants.DEFAULT_IMAGE);
18+
DomainSpec spec2 = new DomainSpec();
19+
assertThat("Expected effective image values to be equal", spec1, equalTo(spec2));
20+
}
21+
22+
@Test
23+
public void whenEffectiveDomainSpecsWithLatestImage_domainSpecNotEquals() {
24+
DomainSpec spec1 = new DomainSpec().withImage(getLatestDefaultImage());
25+
DomainSpec spec2 = new DomainSpec();
26+
assertThat("Expected effective image values to NOT be equal", spec1, not(equalTo(spec2)));
27+
}
28+
29+
@Test
30+
public void whenEffectiveImagePullPolicyWithDefaultImage_domainSpecImagePullPolicyEquals() {
31+
DomainSpec spec1 = new DomainSpec().withImage(KubernetesConstants.DEFAULT_IMAGE);
32+
DomainSpec spec2 = new DomainSpec();
33+
assertThat("Expected effective image pull policy values to be equal",
34+
spec1.getImagePullPolicy(), equalTo(spec2.getImagePullPolicy()));
35+
}
36+
37+
@Test
38+
public void whenEffectiveImagePullPolicyWithLatestImage_domainSpecImagePullPolicyNotEquals() {
39+
DomainSpec spec1 = new DomainSpec().withImage(getLatestDefaultImage());
40+
DomainSpec spec2 = new DomainSpec();
41+
assertThat("Expected effective image pull policy values to NOT be equal",
42+
spec1.getImagePullPolicy(), not(equalTo(spec2.getImagePullPolicy())));
43+
}
44+
45+
@Test
46+
public void whenEffectiveImageWithDefaultImage_imageEquals() {
47+
DomainSpec spec1 = new DomainSpec().withImage(KubernetesConstants.DEFAULT_IMAGE);
48+
DomainSpec spec2 = new DomainSpec();
49+
assertThat("Expected effective image values to be equal",
50+
spec1.getImage(), equalTo(spec2.getImage()));
51+
}
52+
53+
@Test
54+
public void whenEffectiveImageWithLatestImage_imageNotEquals() {
55+
DomainSpec spec1 = new DomainSpec().withImage(getLatestDefaultImage());
56+
DomainSpec spec2 = new DomainSpec();
57+
assertThat("Expected effective image pull policy values to NOT be equal",
58+
spec1.getImage(), not(equalTo(spec2.getImage())));
59+
}
60+
61+
private String getLatestDefaultImage() {
62+
String defaultImageName = KubernetesConstants.DEFAULT_IMAGE
63+
.substring(0, KubernetesConstants.DEFAULT_IMAGE.indexOf(':'));
64+
String latestImage = defaultImageName + KubernetesConstants.LATEST_IMAGE_SUFFIX;
65+
return latestImage;
66+
}
67+
}

0 commit comments

Comments
 (0)