Skip to content

Commit

Permalink
Don't roll on upgrades from 3.0 (#2292)
Browse files Browse the repository at this point in the history
* Don't roll pods when upgrading from 3.0.*

* Take downtime for operator while updating image

Co-authored-by: Ryan Eberhard <ryan.eberhard@oracle.com>
  • Loading branch information
russgold and rjeberhard committed Mar 31, 2021
1 parent be2cba9 commit e95da7d
Show file tree
Hide file tree
Showing 9 changed files with 641 additions and 44 deletions.
46 changes: 23 additions & 23 deletions documentation/charts/index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ entries:
weblogic-operator:
- apiVersion: v1
appVersion: 3.2.0
created: "2021-03-01T11:49:25.929734-05:00"
created: "2021-03-30T11:24:31.829893-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: d6862418f747e8d2d4d184242fb2518abfd5853be99d42bc5b9579878ead54a6
digest: e1c9192b3590d10b8426b7e7bcae27213d9f2296ef4f2cf547e198fd2d89ab1b
name: weblogic-operator
type: application
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.2.0.tgz
version: 3.2.0
- apiVersion: v1
appVersion: 3.1.4
created: "2021-03-01T11:49:25.928315-05:00"
created: "2021-03-30T11:24:31.829174-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 9695fd3c29cd4f006f8e75ae0053683c9aa7213440525002f4f3d36eb8d86633
name: weblogic-operator
Expand All @@ -23,7 +23,7 @@ entries:
version: 3.1.4
- apiVersion: v1
appVersion: 3.1.3
created: "2021-03-01T11:49:25.927245-05:00"
created: "2021-03-30T11:24:31.827653-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: e306bd590dbe84400c6b5bb7a64325330e597223dff63792bb5811c9cfae10ac
name: weblogic-operator
Expand All @@ -33,7 +33,7 @@ entries:
version: 3.1.3
- apiVersion: v1
appVersion: 3.1.2
created: "2021-03-01T11:49:25.926206-05:00"
created: "2021-03-30T11:24:31.826574-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 2d8b77038ba870cc66ddd45e07a593a5ac3159c8b9531b5309688028b5268a5f
name: weblogic-operator
Expand All @@ -43,7 +43,7 @@ entries:
version: 3.1.2
- apiVersion: v1
appVersion: 3.1.1
created: "2021-03-01T11:49:25.925384-05:00"
created: "2021-03-30T11:24:31.825577-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: d839cb7bbce4421a59cd9c3df64b1df8649eeebcb6c6b7be34fec25ad00aa141
name: weblogic-operator
Expand All @@ -53,7 +53,7 @@ entries:
version: 3.1.1
- apiVersion: v1
appVersion: 3.1.0
created: "2021-03-01T11:49:25.92447-05:00"
created: "2021-03-30T11:24:31.824381-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 9e105bec11bab249973370a4d5e653f9104cd9fbaaa0c2090fb173805fb3a692
name: weblogic-operator
Expand All @@ -62,123 +62,123 @@ entries:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.1.0.tgz
version: 3.1.0
- apiVersion: v1
created: "2021-03-01T11:49:25.923639-05:00"
created: "2021-03-30T11:24:31.823554-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 557d0df9958bbdd2f456134d8aff9edf33900bb65774fb0baf2054abd49fdc97
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.4.tgz
version: 3.0.4
- apiVersion: v1
created: "2021-03-01T11:49:25.922991-05:00"
created: "2021-03-30T11:24:31.822787-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 83a0ac84a033ddd9939d4bc5884cc60b22225d7326c43ce8e54a6f403b453814
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.3.tgz
version: 3.0.3
- apiVersion: v1
created: "2021-03-01T11:49:25.922324-05:00"
created: "2021-03-30T11:24:31.822027-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: fa3af5d21f858ff93cc7d58664a6eb0a920207af09e4c669a7ffb12e9e15b88d
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.2.tgz
version: 3.0.2
- apiVersion: v1
created: "2021-03-01T11:49:25.921607-05:00"
created: "2021-03-30T11:24:31.821251-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: aa2b2afe75305bd69f6b07d61e64a37d3bfd249074c81f6a999cef6b4a217fd0
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.1.tgz
version: 3.0.1
- apiVersion: v1
created: "2021-03-01T11:49:25.920811-05:00"
created: "2021-03-30T11:24:31.820527-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 6540a3a7c6a1c34fcf2ff66679947a1964a35e61232b2a8dea3da087a2d5411d
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.0.tgz
version: 3.0.0
- apiVersion: v1
created: "2021-03-01T11:49:25.92013-05:00"
created: "2021-03-30T11:24:31.819655-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 5f4cd8f4f3282b52b5e90a1169f26986e8272671845053606ade9c855fb04151
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-3.0.0-rc1.tgz
version: 3.0.0-rc1
- apiVersion: v1
created: "2021-03-01T11:49:25.919169-05:00"
created: "2021-03-30T11:24:31.818845-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: e3596b2380b264a0a70ba438858ca9af102a79689bf2e21e237eb63ea2997d66
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.6.0.tgz
version: 2.6.0
- apiVersion: v1
created: "2021-03-01T11:49:25.918096-05:00"
created: "2021-03-30T11:24:31.817876-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: fe41421b7dc45dc8a3b2888d3a626a37f5d3c8e1fa292fb6699deedc5e1db33d
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.5.0.tgz
version: 2.5.0
- apiVersion: v1
created: "2021-03-01T11:49:25.917329-05:00"
created: "2021-03-30T11:24:31.81703-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: b36bd32083f67453a62d089a2c09ce38e6655d88ac8a7b38691230c55c40e672
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.4.0.tgz
version: 2.4.0
- apiVersion: v1
created: "2021-03-01T11:49:25.916001-05:00"
created: "2021-03-30T11:24:31.81567-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: a3eafe4c2c6ff49384e56421201e59a3737d651af8d5b605b87a19eb1f6f1dc3
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.3.1.tgz
version: 2.3.1
- apiVersion: v1
created: "2021-03-01T11:49:25.913214-05:00"
created: "2021-03-30T11:24:31.813773-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: cbc6caaa6eb28e3c7e906ede14b2ae511a0b35fc12a8e3ab629155b09993e8b2
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.3.0.tgz
version: 2.3.0
- apiVersion: v1
created: "2021-03-01T11:49:25.912405-05:00"
created: "2021-03-30T11:24:31.812932-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 23d5a1c554fa8211cc1e86b7ade09460917cb2069e68fb4bfdddafc8db44fdcd
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.2.1.tgz
version: 2.2.1
- apiVersion: v1
created: "2021-03-01T11:49:25.911396-05:00"
created: "2021-03-30T11:24:31.812192-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: bba303686cb55d84fe8c0d693a2436e7e686b028085b56e012f6381699a3911f
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.2.0.tgz
version: 2.2.0
- apiVersion: v1
created: "2021-03-01T11:49:25.909964-05:00"
created: "2021-03-30T11:24:31.810952-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 391e23c0969ada5f0cd2a088ddc6f11f237f57521801ed3925db2149a8437a0d
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.1.tgz
version: "2.1"
- apiVersion: v1
created: "2021-03-01T11:49:25.909117-05:00"
created: "2021-03-30T11:24:31.810083-04:00"
description: Helm chart for configuring the WebLogic operator.
digest: 298acda78ab73db6b7ba6f2752311bfa40c65874e03fb196b70976192211c1a5
name: weblogic-operator
urls:
- https://oracle.github.io/weblogic-kubernetes-operator/charts/weblogic-operator-2.0.1.tgz
version: 2.0.1
generated: "2021-03-01T11:49:25.907565-05:00"
generated: "2021-03-30T11:24:31.808922-04:00"
Binary file modified documentation/charts/weblogic-operator-3.2.0.tgz
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ metadata:
labels:
weblogic.operatorName: {{ .Release.Namespace | quote }}
spec:
strategy:
type: Recreate
selector:
matchLabels:
weblogic.operatorName: {{ .Release.Namespace | quote }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,11 @@ ServerSpec getServerSpec() {
return getDomain().getAdminServerSpec();
}

@Override
Integer getOldMetricsPort() {
return getAsPort();
}

@Override
String getServerName() {
return getAsName();
Expand Down Expand Up @@ -446,6 +451,11 @@ Integer getLocalAdminProtocolChannelPort() {
return scan.getLocalAdminProtocolChannelPort();
}

@Override
Integer getOldMetricsPort() {
return getListenPort();
}

@Override
String getServerName() {
return scan.getName();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -185,7 +186,7 @@ String getAsName() {
return domainTopology.getAdminServerName();
}

private Integer getAsPort() {
Integer getAsPort() {
return domainTopology
.getServerConfig(domainTopology.getAdminServerName())
.getLocalAdminProtocolChannelPort();
Expand Down Expand Up @@ -288,6 +289,7 @@ Integer getAdminPort() {
return Optional.ofNullable(scan).map(WlsServerConfig::getAdminPort).orElse(null);
}

abstract Integer getOldMetricsPort();

abstract String getServerName();

Expand Down Expand Up @@ -466,9 +468,7 @@ private boolean mustPatchPod(V1Pod currentPod) {

private boolean canUseCurrentPod(V1Pod currentPod) {

boolean useCurrent =
getRequiredHash(currentPod).equals(AnnotationHelper.getHash(currentPod))
&& canUseNewDomainZip(currentPod);
boolean useCurrent = hasCorrectPodHash(currentPod) && canUseNewDomainZip(currentPod);

if (!useCurrent && AnnotationHelper.getDebugString(currentPod).length() > 0) {
LOGGER.fine(
Expand All @@ -480,25 +480,30 @@ private boolean canUseCurrentPod(V1Pod currentPod) {
return useCurrent;
}

private String getRequiredHash(V1Pod currentPod) {
if (isLegacyPod(currentPod)) {
return adjustedHash(currentPod);
private boolean hasCorrectPodHash(V1Pod currentPod) {
if (!isLegacyPod(currentPod)) {
return AnnotationHelper.getHash(getPodModel()).equals(AnnotationHelper.getHash(currentPod));
} else {
return AnnotationHelper.getHash(getPodModel());
return canAdjustHashToMatch(currentPod, AnnotationHelper.getHash(currentPod));
}
}

private boolean isLegacyPod(V1Pod currentPod) {
return !hasLabel(currentPod, OPERATOR_VERSION);
}

private boolean canAdjustHashToMatch(V1Pod currentPod, String requiredHash) {
return requiredHash.equals(adjustedHash(currentPod, this::addLegacyPrometheusAnnotationsFrom_3_0))
|| requiredHash.equals(adjustedHash(currentPod, this::addLegacyPrometheusAnnotationsFrom_3_1));
}

private boolean hasLabel(V1Pod pod, String key) {
return pod.getMetadata().getLabels().containsKey(key);
}

private String adjustedHash(V1Pod currentPod) {
private String adjustedHash(V1Pod currentPod, Consumer<V1Pod> prometheusAdjustment) {
V1Pod recipe = createPodRecipe();
addLegacyPrometheusAnnotations(recipe);
prometheusAdjustment.accept(recipe);

if (isLegacyMiiPod(currentPod)) {
copyLabel(currentPod, recipe, MODEL_IN_IMAGE_DOMAINZIP_HASH);
Expand All @@ -507,7 +512,11 @@ private String adjustedHash(V1Pod currentPod) {
return AnnotationHelper.createHash(recipe);
}

private void addLegacyPrometheusAnnotations(V1Pod pod) {
private void addLegacyPrometheusAnnotationsFrom_3_0(V1Pod pod) {
AnnotationHelper.annotateForPrometheus(pod.getMetadata(), "/wls-exporter", getOldMetricsPort());
}

private void addLegacyPrometheusAnnotationsFrom_3_1(V1Pod pod) {
AnnotationHelper.annotateForPrometheus(pod.getMetadata(), "/wls-exporter", getMetricsPort());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,22 @@ void setServerPort(int port) {
}

@Override
String getReferencePlainPortPodYaml() {
String getReferencePlainPortPodYaml_3_0() {
return ReferenceObjects.ADMIN_PLAINPORT_POD_3_0;
}

@Override
String getReferencePlainPortPodYaml_3_1() {
return ReferenceObjects.ADMIN_PLAINPORT_POD_3_1;
}

@Override
String getReferenceSslPortPodYaml() {
String getReferenceSslPortPodYaml_3_0() {
return ReferenceObjects.ADMIN_SSLPORT_POD_3_0;
}

@Override
String getReferenceSslPortPodYaml_3_1() {
return ReferenceObjects.ADMIN_SSLPORT_POD_3_1;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1289,12 +1289,22 @@ void setServerPort(int port) {
}

@Override
String getReferencePlainPortPodYaml() {
String getReferencePlainPortPodYaml_3_0() {
return ReferenceObjects.MANAGED_PLAINPORT_POD_3_0;
}

@Override
String getReferencePlainPortPodYaml_3_1() {
return ReferenceObjects.MANAGED_PLAINPORT_POD_3_1;
}

@Override
String getReferenceSslPortPodYaml() {
String getReferenceSslPortPodYaml_3_0() {
return ReferenceObjects.MANAGED_SSLPORT_POD_3_0;
}

@Override
String getReferenceSslPortPodYaml_3_1() {
return ReferenceObjects.MANAGED_SSLPORT_POD_3_1;
}

Expand Down
Loading

0 comments on commit e95da7d

Please sign in to comment.