Skip to content

Commit a0548b2

Browse files
committed
feat: blacklist of problematic resources for previous version annotation
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 4225645 commit a0548b2

File tree

3 files changed

+37
-4
lines changed

3 files changed

+37
-4
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.javaoperatorsdk.operator.api.config;
22

33
import java.time.Duration;
4+
import java.util.List;
45
import java.util.Optional;
56
import java.util.Set;
67
import java.util.concurrent.ExecutorService;
@@ -13,6 +14,9 @@
1314
import io.fabric8.kubernetes.api.model.ConfigMap;
1415
import io.fabric8.kubernetes.api.model.HasMetadata;
1516
import io.fabric8.kubernetes.api.model.Secret;
17+
import io.fabric8.kubernetes.api.model.apps.Deployment;
18+
import io.fabric8.kubernetes.api.model.apps.ReplicaSet;
19+
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
1620
import io.fabric8.kubernetes.client.Config;
1721
import io.fabric8.kubernetes.client.ConfigBuilder;
1822
import io.fabric8.kubernetes.client.CustomResource;
@@ -448,6 +452,10 @@ default boolean previousAnnotationForDependentResourcesEventFiltering() {
448452
return true;
449453
}
450454

455+
default List<Class<? extends HasMetadata>> previousAnnotationUsageBlacklist() {
456+
return List.of(Deployment.class, StatefulSet.class, ReplicaSet.class);
457+
}
458+
451459
/**
452460
* If the event logic should parse the resourceVersion to determine the ordering of dependent
453461
* resource events. This is typically not needed.

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.javaoperatorsdk.operator.api.config;
22

33
import java.time.Duration;
4+
import java.util.List;
45
import java.util.Optional;
56
import java.util.Set;
67
import java.util.concurrent.ExecutorService;
@@ -40,6 +41,7 @@ public class ConfigurationServiceOverrider {
4041
private Boolean parseResourceVersions;
4142
private Boolean useSSAToPatchPrimaryResource;
4243
private Boolean cloneSecondaryResourcesWhenGettingFromCache;
44+
private List<Class<? extends HasMetadata>> previousAnnotationUsageBlacklist;
4345

4446
@SuppressWarnings("rawtypes")
4547
private DependentResourceFactory dependentResourceFactory;
@@ -188,6 +190,12 @@ public ConfigurationServiceOverrider withCloneSecondaryResourcesWhenGettingFromC
188190
return this;
189191
}
190192

193+
public ConfigurationServiceOverrider previousAnnotationUsageBlacklist(
194+
List<Class<? extends HasMetadata>> previousAnnotationUsageBlacklist) {
195+
this.previousAnnotationUsageBlacklist = previousAnnotationUsageBlacklist;
196+
return this;
197+
}
198+
191199
public ConfigurationService build() {
192200
return new BaseConfigurationService(original.getVersion(), cloner, client) {
193201
@Override
@@ -328,6 +336,13 @@ public boolean cloneSecondaryResourcesWhenGettingFromCache() {
328336
cloneSecondaryResourcesWhenGettingFromCache,
329337
ConfigurationService::cloneSecondaryResourcesWhenGettingFromCache);
330338
}
339+
340+
@Override
341+
public List<Class<? extends HasMetadata>> previousAnnotationUsageBlacklist() {
342+
return overriddenValueOrDefault(
343+
previousAnnotationUsageBlacklist,
344+
ConfigurationService::previousAnnotationUsageBlacklist);
345+
}
331346
};
332347
}
333348
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public abstract class KubernetesDependentResource<R extends HasMetadata, P exten
4040
private final boolean garbageCollected = this instanceof GarbageCollected;
4141
private KubernetesDependentResourceConfig<R> kubernetesDependentResourceConfig;
4242
private volatile Boolean useSSA;
43+
private volatile Boolean usePreviousAnnotationForEventFiltering;
4344

4445
public KubernetesDependentResource(Class<R> resourceType) {
4546
this(resourceType, null);
@@ -160,10 +161,19 @@ protected boolean useSSA(Context<P> context) {
160161
}
161162

162163
private boolean usePreviousAnnotation(Context<P> context) {
163-
return context
164-
.getControllerConfiguration()
165-
.getConfigurationService()
166-
.previousAnnotationForDependentResourcesEventFiltering();
164+
if (usePreviousAnnotationForEventFiltering == null) {
165+
usePreviousAnnotationForEventFiltering =
166+
context
167+
.getControllerConfiguration()
168+
.getConfigurationService()
169+
.previousAnnotationForDependentResourcesEventFiltering()
170+
&& !context
171+
.getControllerConfiguration()
172+
.getConfigurationService()
173+
.previousAnnotationUsageBlacklist()
174+
.contains(this.resourceType());
175+
}
176+
return usePreviousAnnotationForEventFiltering;
167177
}
168178

169179
@Override

0 commit comments

Comments
 (0)