Skip to content

Commit a4ab368

Browse files
committed
feat: add feature switch to use SSA for managing finalizer
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 1dc8669 commit a4ab368

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,21 @@ default boolean useSSAToPatchPrimaryResource() {
505505
return true;
506506
}
507507

508+
/**
509+
* {@link io.javaoperatorsdk.operator.api.reconciler.UpdateControl} patch resource or status can
510+
* either use simple patches or SSA. Setting this to {@code true}, controllers will use SSA for
511+
* adding finalizers, patching resources and status.
512+
*
513+
* @return {@code true} if Server-Side Apply (SSA) should be used when managing finalizers,
514+
* {@code false} otherwise
515+
* @see ConfigurationServiceOverrider#withUseSSAToManageFinalizer(boolean)
516+
* @since 5.1.2
517+
*/
518+
default boolean useSSAToManageFinalizer() {
519+
return true;
520+
}
521+
522+
508523
/**
509524
* Determines whether resources retrieved from caches such as via calls to {@link
510525
* Context#getSecondaryResource(Class)} should be defensively cloned first.

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class ConfigurationServiceOverrider {
3939
private Boolean previousAnnotationForDependentResources;
4040
private Boolean parseResourceVersions;
4141
private Boolean useSSAToPatchPrimaryResource;
42+
private Boolean useSSAToManageFinalizer;
4243
private Boolean cloneSecondaryResourcesWhenGettingFromCache;
4344
private Set<Class<? extends HasMetadata>> previousAnnotationUsageBlocklist;
4445

@@ -183,6 +184,11 @@ public ConfigurationServiceOverrider withUseSSAToPatchPrimaryResource(boolean va
183184
return this;
184185
}
185186

187+
public ConfigurationServiceOverrider withUseSSAToManageFinalizer(boolean value) {
188+
this.useSSAToManageFinalizer = value;
189+
return this;
190+
}
191+
186192
public ConfigurationServiceOverrider withCloneSecondaryResourcesWhenGettingFromCache(
187193
boolean value) {
188194
this.cloneSecondaryResourcesWhenGettingFromCache = value;
@@ -336,6 +342,12 @@ public boolean useSSAToPatchPrimaryResource() {
336342
useSSAToPatchPrimaryResource, ConfigurationService::useSSAToPatchPrimaryResource);
337343
}
338344

345+
@Override
346+
public boolean useSSAToManageFinalizer() {
347+
return overriddenValueOrDefault(
348+
useSSAToManageFinalizer, ConfigurationService::useSSAToPatchPrimaryResource);
349+
}
350+
339351
@Override
340352
public boolean cloneSecondaryResourcesWhenGettingFromCache() {
341353
return overriddenValueOrDefault(

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class ReconciliationDispatcher<P extends HasMetadata> {
4242
private final boolean retryConfigurationHasZeroAttempts;
4343
private final Cloner cloner;
4444
private final boolean useSSA;
45+
private final boolean useSSAForFinalizer;
4546

4647
ReconciliationDispatcher(Controller<P> controller, CustomResourceFacade<P> customResourceFacade) {
4748
this.controller = controller;
@@ -52,6 +53,7 @@ class ReconciliationDispatcher<P extends HasMetadata> {
5253
var retry = configuration.getRetry();
5354
retryConfigurationHasZeroAttempts = retry == null || retry.initExecution().isLastAttempt();
5455
useSSA = configuration.getConfigurationService().useSSAToPatchPrimaryResource();
56+
useSSAForFinalizer = configuration.getConfigurationService().useSSAToManageFinalizer();
5557
}
5658

5759
public ReconciliationDispatcher(Controller<P> controller) {
@@ -119,7 +121,7 @@ private PostExecutionControl<P> handleReconcile(
119121
* finalizer.
120122
*/
121123
P updatedResource;
122-
if (useSSA) {
124+
if (useSSAForFinalizer) {
123125
updatedResource = addFinalizerWithSSA(originalResource);
124126
} else {
125127
updatedResource = updateCustomResourceWithFinalizer(resourceForExecution, originalResource);

0 commit comments

Comments
 (0)