Skip to content

Commit 8dd8302

Browse files
committed
chore: adapt to latest changes
1 parent 5d60b4a commit 8dd8302

File tree

11 files changed

+137
-87
lines changed

11 files changed

+137
-87
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package io.javaoperatorsdk.operator.api;
22

3-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
43
import java.lang.annotation.ElementType;
54
import java.lang.annotation.Retention;
65
import java.lang.annotation.RetentionPolicy;
76
import java.lang.annotation.Target;
87

8+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
9+
910
@Retention(RetentionPolicy.RUNTIME)
1011
@Target({ElementType.TYPE})
1112
public @interface Controller {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3+
import java.util.Set;
4+
35
import io.fabric8.kubernetes.client.CustomResource;
46
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
5-
import java.util.Set;
67

78
/**
89
* @deprecated use {@link DefaultControllerConfiguration} instead

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3-
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.javaoperatorsdk.operator.ControllerUtils;
5-
import io.javaoperatorsdk.operator.api.Controller;
63
import java.lang.reflect.ParameterizedType;
74
import java.util.Collections;
85
import java.util.Set;
9-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
10-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilters;
116

127
import io.fabric8.kubernetes.client.CustomResource;
138
import io.javaoperatorsdk.operator.ControllerUtils;
149
import io.javaoperatorsdk.operator.api.Controller;
10+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
11+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilters;
1512

1613
public interface ControllerConfiguration<R extends CustomResource> {
1714

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3-
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
53
import java.util.HashSet;
64
import java.util.List;
75
import java.util.Set;
86

7+
import io.fabric8.kubernetes.client.CustomResource;
8+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
9+
910
public class ControllerConfigurationOverrider<R extends CustomResource<?, ?>> {
1011

1112
private String finalizer;

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3-
import io.fabric8.kubernetes.client.CustomResource;
4-
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
53
import java.util.Collections;
64
import java.util.Set;
75

6+
import io.fabric8.kubernetes.client.CustomResource;
7+
import io.javaoperatorsdk.operator.processing.event.internal.CustomResourceEventFilter;
8+
89
public class DefaultControllerConfiguration<R extends CustomResource<?, ?>>
910
implements ControllerConfiguration<R> {
1011

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

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
package io.javaoperatorsdk.operator.processing;
22

3-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
4-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
5-
6-
import com.fasterxml.jackson.core.JsonProcessingException;
7-
import com.fasterxml.jackson.databind.ObjectMapper;
8-
import io.fabric8.kubernetes.client.CustomResource;
93
import java.util.List;
104
import java.util.Optional;
115
import java.util.Set;
@@ -15,10 +9,19 @@
159
import java.util.concurrent.locks.ReentrantLock;
1610
import java.util.function.Predicate;
1711
import java.util.stream.Collectors;
12+
1813
import org.slf4j.Logger;
1914
import org.slf4j.LoggerFactory;
15+
16+
import io.fabric8.kubernetes.client.CustomResource;
2017
import io.javaoperatorsdk.operator.Metrics;
2118

19+
import com.fasterxml.jackson.core.JsonProcessingException;
20+
import com.fasterxml.jackson.databind.ObjectMapper;
21+
22+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
23+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
24+
2225
@SuppressWarnings("rawtypes")
2326
public class CustomResourceCache<T extends CustomResource<?, ?>> {
2427

@@ -41,11 +44,12 @@ public CustomResourceCache(ObjectMapper objectMapper, Metrics metrics) {
4144
resources = metrics.monitorSizeOf(new ConcurrentHashMap<>(), "cache");
4245
}
4346

47+
@SuppressWarnings("unchecked")
4448
public void cacheResource(T resource) {
4549
cacheResource(resource, passthrough);
4650
}
4751

48-
public void cacheResource(T resource, Predicate<CustomResource> predicate) {
52+
public void cacheResource(T resource, Predicate<T> predicate) {
4953
try {
5054
lock.lock();
5155
final var uid = getUID(resource);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface CustomResourceEventFilter<T extends CustomResource> {
1818
* be propagated to the controller or not.
1919
*
2020
* @param configuration the target controller's configuration
21-
* @param oldResource the old version of the resource
21+
* @param oldResource the old version of the resource, null if no old resource available
2222
* @param newResource the new version of the resource
2323
* @return {@code true} if the change needs to be propagated to the controller, {@code false}
2424
* otherwise
@@ -28,7 +28,7 @@ public interface CustomResourceEventFilter<T extends CustomResource> {
2828
/**
2929
* Combines this filter with the provided one with an AND logic, i.e. the resulting filter will
3030
* only accept the change if both this and the other filter accept it, reject it otherwise.
31-
*
31+
*
3232
* @param other the possibly {@code null} other filter to combine this one with
3333
* @return a composite filter implementing the AND logic between this and the provided filter
3434
*/

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

Lines changed: 80 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public final class CustomResourceEventFilters {
1111
(configuration, oldResource, newResource) -> {
1212
if (configuration.useFinalizer()) {
1313
final var finalizer = configuration.getFinalizer();
14-
boolean oldFinalizer = oldResource.hasFinalizer(finalizer);
14+
boolean oldFinalizer = oldResource == null || oldResource.hasFinalizer(finalizer);
1515
boolean newFinalizer = newResource.hasFinalizer(finalizer);
1616

1717
return !newFinalizer || !oldFinalizer;
@@ -21,17 +21,24 @@ public final class CustomResourceEventFilters {
2121
};
2222

2323
private static final CustomResourceEventFilter<CustomResource> GENERATION_AWARE =
24-
(configuration, oldResource, newResource) -> !configuration.isGenerationAware()
24+
(configuration, oldResource, newResource) -> oldResource == null
25+
|| !configuration.isGenerationAware()
2526
|| oldResource.getMetadata().getGeneration() < newResource.getMetadata().getGeneration();
2627

2728
private static final CustomResourceEventFilter<CustomResource> PASSTHROUGH =
2829
(configuration, oldResource, newResource) -> true;
2930

31+
private static final CustomResourceEventFilter<CustomResource> NONE =
32+
(configuration, oldResource, newResource) -> false;
33+
34+
private static final CustomResourceEventFilter<CustomResource> MARKED_FOR_DELETION =
35+
(configuration, oldResource, newResource) -> newResource.isMarkedForDeletion();
36+
3037
private CustomResourceEventFilters() {}
3138

3239
/**
3340
* Retrieves a filter that accepts all events.
34-
*
41+
*
3542
* @param <T> the type of custom resource the filter should handle
3643
* @return a filter that accepts all events
3744
*/
@@ -40,6 +47,17 @@ public static <T extends CustomResource> CustomResourceEventFilter<T> passthroug
4047
return (CustomResourceEventFilter<T>) PASSTHROUGH;
4148
}
4249

50+
/**
51+
* Retrieves a filter that reject all events.
52+
*
53+
* @param <T> the type of custom resource the filter should handle
54+
* @return a filter that reject all events
55+
*/
56+
@SuppressWarnings("unchecked")
57+
public static <T extends CustomResource> CustomResourceEventFilter<T> none() {
58+
return (CustomResourceEventFilter<T>) NONE;
59+
}
60+
4361
/**
4462
* Retrieves a filter that accepts all events if generation-aware processing is not activated but
4563
* only changes that represent a generation increase otherwise.
@@ -55,7 +73,7 @@ public static <T extends CustomResource> CustomResourceEventFilter<T> generation
5573
/**
5674
* Retrieves a filter that accepts changes if the target controller uses a finalizer and that
5775
* finalizer hasn't already been applied, rejecting them otherwise.
58-
*
76+
*
5977
* @param <T> the type of custom resource the filter should handle
6078
* @return a filter accepting changes based on whether the finalizer is needed and has been
6179
* applied
@@ -66,37 +84,80 @@ public static <T extends CustomResource> CustomResourceEventFilter<T> finalizerN
6684
}
6785

6886
/**
69-
* Combines both provided, potentially {@code null} filters with an AND logic, i.e. the resulting
70-
* filter will only accept the change if both filters accept it, reject it otherwise.
87+
* Retrieves a filter that accepts changes if the custom resource is marked for deletion.
88+
*
89+
* @param <T> the type of custom resource the filter should handle
90+
* @return a filter accepting changes based on whether the Custom Resource is marked for deletion.
91+
*/
92+
@SuppressWarnings("unchecked")
93+
public static <T extends CustomResource> CustomResourceEventFilter<T> markedForDeletion() {
94+
return (CustomResourceEventFilter<T>) MARKED_FOR_DELETION;
95+
}
96+
97+
/**
98+
* Combines the provided, potentially {@code null} filters with an AND logic, i.e. the resulting
99+
* filter will only accept the change if all filters accept it, reject it otherwise.
71100
*
72101
* Note that the evaluation of filters is lazy: the result is returned as soon as possible without
73102
* evaluating all filters if possible.
74-
*
75-
* @param first the first filter to combine
76-
* @param second the second filter to combine
103+
*
104+
* @param items the filters to combine
77105
* @param <T> the type of custom resources the filters are supposed to handle
78-
* @return a combined filter implementing the AND logic combination of both provided filters
106+
* @return a combined filter implementing the AND logic combination of the provided filters
79107
*/
108+
@SafeVarargs
80109
public static <T extends CustomResource<?, ?>> CustomResourceEventFilter<T> and(
81-
CustomResourceEventFilter<T> first, CustomResourceEventFilter<T> second) {
82-
return first == null ? (second == null ? passthrough() : second) : first.and(second);
110+
CustomResourceEventFilter<T>... items) {
111+
if (items == null) {
112+
return none();
113+
}
114+
115+
return (configuration, oldResource, newResource) -> {
116+
for (int i = 0; i < items.length; i++) {
117+
if (items[i] == null) {
118+
continue;
119+
}
120+
121+
if (!items[i].acceptChange(configuration, oldResource, newResource)) {
122+
return false;
123+
}
124+
}
125+
126+
return true;
127+
};
83128
}
84129

85130
/**
86-
* Combines both provided, potentially {@code null} filters with an OR logic, i.e. the resulting
87-
* filter will accept the change if any of the filters accepts it, rejecting it only if both
88-
* reject it.
131+
* Combines the provided, potentially {@code null} filters with an OR logic, i.e. the resulting
132+
* filter will accept the change if any of the filters accepts it, rejecting it only if all reject
133+
* it.
89134
* <p>
90135
* Note that the evaluation of filters is lazy: the result is returned as soon as possible without
91136
* evaluating all filters if possible.
92137
*
93-
* @param first the first filter to combine
94-
* @param second the second filter to combine
138+
* @param items the filters to combine
95139
* @param <T> the type of custom resources the filters are supposed to handle
96140
* @return a combined filter implementing the OR logic combination of both provided filters
97141
*/
142+
@SafeVarargs
98143
public static <T extends CustomResource<?, ?>> CustomResourceEventFilter<T> or(
99-
CustomResourceEventFilter<T> first, CustomResourceEventFilter<T> second) {
100-
return first == null ? (second == null ? passthrough() : second) : first.or(second);
144+
CustomResourceEventFilter<T>... items) {
145+
if (items == null) {
146+
return none();
147+
}
148+
149+
return (configuration, oldResource, newResource) -> {
150+
for (int i = 0; i < items.length; i++) {
151+
if (items[i] == null) {
152+
continue;
153+
}
154+
155+
if (items[i].acceptChange(configuration, oldResource, newResource)) {
156+
return true;
157+
}
158+
}
159+
160+
return false;
161+
};
101162
}
102163
}

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

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
package io.javaoperatorsdk.operator.processing.event.internal;
22

3-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
4-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
5-
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
6-
73
import java.io.IOException;
84
import java.util.LinkedList;
95
import java.util.List;
10-
import java.util.Map;
11-
import java.util.concurrent.ConcurrentHashMap;
126

137
import org.slf4j.Logger;
148
import org.slf4j.LoggerFactory;
159

1610
import io.fabric8.kubernetes.api.model.ListOptions;
1711
import io.fabric8.kubernetes.client.CustomResource;
12+
import io.fabric8.kubernetes.client.KubernetesClientException;
1813
import io.fabric8.kubernetes.client.Watch;
1914
import io.fabric8.kubernetes.client.Watcher;
2015
import io.fabric8.kubernetes.client.WatcherException;
2116
import io.fabric8.kubernetes.client.utils.Utils;
17+
import io.javaoperatorsdk.operator.MissingCRDException;
2218
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
2319
import io.javaoperatorsdk.operator.processing.ConfiguredController;
2420
import io.javaoperatorsdk.operator.processing.CustomResourceCache;
2521
import io.javaoperatorsdk.operator.processing.KubernetesResourceUtils;
2622
import io.javaoperatorsdk.operator.processing.event.AbstractEventSource;
27-
import io.fabric8.kubernetes.client.KubernetesClientException;
28-
import io.javaoperatorsdk.operator.MissingCRDException;
23+
24+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName;
25+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getUID;
26+
import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getVersion;
2927

3028
/**
3129
* This is a special case since is not bound to a single custom resource
@@ -120,29 +118,14 @@ public void eventReceived(Watcher.Action action, T customResource) {
120118
return;
121119
}
122120

123-
boolean eventAccepted;
124-
if (oldResource == null || customResource.isMarkedForDeletion()) {
125-
eventAccepted = true;
126-
} else {
127-
final var configuration = controller.getConfiguration();
128-
129-
// if the finalizer has not been set, the operator logic will add it so there will be
130-
// events generated by the operator itself that won't lead to a new generation so such
131-
// events should not be filtered
132-
final CustomResourceEventFilter<T> finalizerPredicate =
133-
CustomResourceEventFilters.finalizerNeededAndApplied();
134-
eventAccepted = finalizerPredicate.acceptChange(configuration, oldResource, customResource);
135-
136-
if (!eventAccepted) {
137-
CustomResourceEventFilter<T> filter = CustomResourceEventFilters.and(
138-
configuration.getEventFilter(),
139-
CustomResourceEventFilters.generationAware());
140-
141-
eventAccepted = filter.acceptChange(configuration, oldResource, customResource);
142-
}
143-
}
121+
final CustomResourceEventFilter<T> filter = CustomResourceEventFilters.or(
122+
CustomResourceEventFilters.finalizerNeededAndApplied(),
123+
CustomResourceEventFilters.markedForDeletion(),
124+
CustomResourceEventFilters.and(
125+
controller.getConfiguration().getEventFilter(),
126+
CustomResourceEventFilters.generationAware()));
144127

145-
if (eventAccepted) {
128+
if (filter.acceptChange(controller.getConfiguration(), oldResource, customResource)) {
146129
eventHandler.handleEvent(new CustomResourceEvent(action, customResource, this));
147130
} else {
148131
log.debug(

0 commit comments

Comments
 (0)