Skip to content

Commit f3b7628

Browse files
authored
Set the correct revision number in stateful set
Fixes #38617 Signed-off-by: Pedro Ruivo <[email protected]>
1 parent 13405b1 commit f3b7628

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

operator/src/main/java/org/keycloak/operator/controllers/KeycloakDeploymentDependentResource.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.keycloak.operator.Constants;
4444
import org.keycloak.operator.ContextUtils;
4545
import org.keycloak.operator.Utils;
46+
import org.keycloak.operator.crds.v2alpha1.CRDUtils;
4647
import org.keycloak.operator.crds.v2alpha1.deployment.Keycloak;
4748
import org.keycloak.operator.crds.v2alpha1.deployment.KeycloakSpec;
4849
import org.keycloak.operator.crds.v2alpha1.deployment.ValueOrSecret;
@@ -146,10 +147,13 @@ public StatefulSet desired(Keycloak primary, Context<Keycloak> context) {
146147
watchedResources.annotateDeployment(new ArrayList<>(allSecrets), Secret.class, baseDeployment, context.getClient());
147148
}
148149

150+
// add revision from CR if set
151+
UpdateSpec.getRevision(primary).ifPresent(rev -> addUpdateRevisionAnnotation(rev, baseDeployment));
152+
149153
var updateType = ContextUtils.getUpdateType(context);
150154
// empty means no existing stateful set.
151155
if (updateType.isEmpty()) {
152-
return addUpdateRevisionAnnotation(baseDeployment, primary);
156+
return baseDeployment;
153157
}
154158

155159
var existingDeployment = ContextUtils.getCurrentStatefulSet(context).orElseThrow();
@@ -162,7 +166,7 @@ public StatefulSet desired(Keycloak primary, Context<Keycloak> context) {
162166

163167
return switch (updateType.get()) {
164168
case ROLLING -> handleRollingUpdate(baseDeployment, context, primary);
165-
case RECREATE -> handleRecreateUpdate(existingDeployment, baseDeployment, context, primary);
169+
case RECREATE -> handleRecreateUpdate(existingDeployment, baseDeployment, context);
166170
};
167171
}
168172

@@ -551,11 +555,10 @@ private static StatefulSet handleRollingUpdate(StatefulSet desired, Context<Keyc
551555
.editMetadata()
552556
.addToAnnotations(Constants.KEYCLOAK_RECREATE_UPDATE_ANNOTATION, "false")
553557
.addToAnnotations(Constants.KEYCLOAK_UPDATE_REASON_ANNOTATION, ContextUtils.getUpdateReason(context));
554-
addUpdateRevisionAnnotation(builder, primary);
555558
return builder.endMetadata().build();
556559
}
557560

558-
private static StatefulSet handleRecreateUpdate(StatefulSet actual, StatefulSet desired, Context<Keycloak> context, Keycloak primary) {
561+
private static StatefulSet handleRecreateUpdate(StatefulSet actual, StatefulSet desired, Context<Keycloak> context) {
559562
if (actual.getStatus().getReplicas() == 0) {
560563
Log.debug("Performing a recreate update - scaling up the stateful set");
561564
return desired;
@@ -567,25 +570,24 @@ private static StatefulSet handleRecreateUpdate(StatefulSet actual, StatefulSet
567570
.withReplicas(0)
568571
.endSpec();
569572
// update metadata from the new stateful set, it is safe to do so.
570-
builder.withMetadata(desired.getMetadata());
571-
var metadataBuilder = builder.editMetadata()
573+
var metadataBuilder = desired.getMetadata().edit()
572574
.addToAnnotations(Constants.KEYCLOAK_MIGRATING_ANNOTATION, Boolean.TRUE.toString())
573575
.addToAnnotations(Constants.KEYCLOAK_RECREATE_UPDATE_ANNOTATION, Boolean.TRUE.toString())
574576
.addToAnnotations(Constants.KEYCLOAK_UPDATE_REASON_ANNOTATION, ContextUtils.getUpdateReason(context));
575-
addUpdateRevisionAnnotation(metadataBuilder, primary);
576-
metadataBuilder.endMetadata();
577-
return builder.build();
577+
// copy revision number from the previous stateful set.
578+
CRDUtils.getRevision(actual).ifPresent(rev -> addUpdateRevisionAnnotation(rev, metadataBuilder));
579+
return builder
580+
.withMetadata(metadataBuilder.build())
581+
.build();
578582
}
579583

580-
private static StatefulSet addUpdateRevisionAnnotation(StatefulSet statefulSet, Keycloak primary) {
581-
var builder = statefulSet.toBuilder()
582-
.editMetadata();
583-
addUpdateRevisionAnnotation(builder, primary);
584-
return builder.endMetadata().build();
584+
private static void addUpdateRevisionAnnotation(String revision, StatefulSet toUpdate) {
585+
var metadataBuilder = toUpdate.getMetadata().edit();
586+
addUpdateRevisionAnnotation(revision, metadataBuilder);
587+
toUpdate.setMetadata(metadataBuilder.build());
585588
}
586589

587-
private static void addUpdateRevisionAnnotation(ObjectMetaFluent<?> builder, Keycloak primary) {
588-
UpdateSpec.getRevision(primary)
589-
.ifPresent(rev -> builder.addToAnnotations(Constants.KEYCLOAK_UPDATE_REVISION_ANNOTATION, rev));
590+
private static void addUpdateRevisionAnnotation(String revision, ObjectMetaFluent<?> builder) {
591+
builder.addToAnnotations(Constants.KEYCLOAK_UPDATE_REVISION_ANNOTATION, revision);
590592
}
591593
}

0 commit comments

Comments
 (0)