Skip to content

Commit 6b95603

Browse files
authored
improve: filters accept super types (#1940)
1 parent 825a6c1 commit 6b95603

File tree

9 files changed

+56
-51
lines changed

9 files changed

+56
-51
lines changed

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3232
private ResourceEventFilter<R> customResourcePredicate;
3333
private final ControllerConfiguration<R> original;
3434
private Duration reconciliationMaxInterval;
35-
private OnAddFilter<R> onAddFilter;
36-
private OnUpdateFilter<R> onUpdateFilter;
37-
private GenericFilter<R> genericFilter;
35+
private OnAddFilter<? super R> onAddFilter;
36+
private OnUpdateFilter<? super R> onUpdateFilter;
37+
private GenericFilter<? super R> genericFilter;
3838
private RateLimiter rateLimiter;
3939
private Map<DependentResourceSpec, Object> configurations;
4040
private ItemStore<R> itemStore;

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

+10-8
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,17 @@ public class DefaultResourceConfiguration<R extends HasMetadata>
1515

1616
private final Class<R> resourceClass;
1717
private final String resourceTypeName;
18-
private final OnAddFilter<R> onAddFilter;
19-
private final OnUpdateFilter<R> onUpdateFilter;
20-
private final GenericFilter<R> genericFilter;
18+
private final OnAddFilter<? super R> onAddFilter;
19+
private final OnUpdateFilter<? super R> onUpdateFilter;
20+
private final GenericFilter<? super R> genericFilter;
2121
private final String labelSelector;
2222
private final Set<String> namespaces;
2323
private final ItemStore<R> itemStore;
2424

2525
protected DefaultResourceConfiguration(Class<R> resourceClass,
26-
Set<String> namespaces, String labelSelector, OnAddFilter<R> onAddFilter,
27-
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, ItemStore<R> itemStore) {
26+
Set<String> namespaces, String labelSelector, OnAddFilter<? super R> onAddFilter,
27+
OnUpdateFilter<? super R> onUpdateFilter, GenericFilter<? super R> genericFilter,
28+
ItemStore<R> itemStore) {
2829
this.resourceClass = resourceClass;
2930
this.resourceTypeName = ReconcilerUtils.getResourceTypeName(resourceClass);
3031
this.onAddFilter = onAddFilter;
@@ -57,16 +58,17 @@ public Class<R> getResourceClass() {
5758
}
5859

5960
@Override
60-
public Optional<OnAddFilter<R>> onAddFilter() {
61+
public Optional<OnAddFilter<? super R>> onAddFilter() {
6162
return Optional.ofNullable(onAddFilter);
6263
}
6364

6465
@Override
65-
public Optional<OnUpdateFilter<R>> onUpdateFilter() {
66+
public Optional<OnUpdateFilter<? super R>> onUpdateFilter() {
6667
return Optional.ofNullable(onUpdateFilter);
6768
}
6869

69-
public Optional<GenericFilter<R>> genericFilter() {
70+
@Override
71+
public Optional<GenericFilter<? super R>> genericFilter() {
7072
return Optional.ofNullable(genericFilter);
7173
}
7274

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ protected RateLimiter ensureRateLimiter(RateLimiter given) {
6767
public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
6868
boolean generationAware, String associatedReconcilerClassName, Retry retry,
6969
RateLimiter rateLimiter, Duration maxReconciliationInterval,
70-
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter,
71-
GenericFilter<P> genericFilter,
70+
OnAddFilter<? super P> onAddFilter, OnUpdateFilter<? super P> onUpdateFilter,
71+
GenericFilter<? super P> genericFilter,
7272
List<DependentResourceSpec> dependentResources,
7373
Set<String> namespaces, String finalizer, String labelSelector,
7474
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore,
@@ -82,7 +82,8 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
8282
protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
8383
boolean generationAware, String associatedReconcilerClassName, Retry retry,
8484
RateLimiter rateLimiter, Duration maxReconciliationInterval,
85-
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter, GenericFilter<P> genericFilter,
85+
OnAddFilter<? super P> onAddFilter, OnUpdateFilter<? super P> onUpdateFilter,
86+
GenericFilter<? super P> genericFilter,
8687
Set<String> namespaces, String finalizer, String labelSelector,
8788
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore,
8889
ConfigurationService configurationService) {

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ default String getResourceTypeName() {
2323
return ReconcilerUtils.getResourceTypeName(getResourceClass());
2424
}
2525

26-
default Optional<OnAddFilter<R>> onAddFilter() {
26+
default Optional<OnAddFilter<? super R>> onAddFilter() {
2727
return Optional.empty();
2828
}
2929

30-
default Optional<OnUpdateFilter<R>> onUpdateFilter() {
30+
default Optional<OnUpdateFilter<? super R>> onUpdateFilter() {
3131
return Optional.empty();
3232
}
3333

34-
default Optional<GenericFilter<R>> genericFilter() {
34+
default Optional<GenericFilter<? super R>> genericFilter() {
3535
return Optional.empty();
3636
}
3737

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

+20-18
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@ class DefaultInformerConfiguration<R extends HasMetadata> extends
2929
private final PrimaryToSecondaryMapper<?> primaryToSecondaryMapper;
3030
private final SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper;
3131
private final boolean followControllerNamespaceChanges;
32-
private final OnDeleteFilter<R> onDeleteFilter;
32+
private final OnDeleteFilter<? super R> onDeleteFilter;
3333

3434
protected DefaultInformerConfiguration(String labelSelector,
3535
Class<R> resourceClass,
3636
PrimaryToSecondaryMapper<?> primaryToSecondaryMapper,
3737
SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper,
3838
Set<String> namespaces, boolean followControllerNamespaceChanges,
39-
OnAddFilter<R> onAddFilter,
40-
OnUpdateFilter<R> onUpdateFilter,
41-
OnDeleteFilter<R> onDeleteFilter,
42-
GenericFilter<R> genericFilter,
39+
OnAddFilter<? super R> onAddFilter,
40+
OnUpdateFilter<? super R> onUpdateFilter,
41+
OnDeleteFilter<? super R> onDeleteFilter,
42+
GenericFilter<? super R> genericFilter,
4343
ItemStore<R> itemStore) {
4444
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter,
4545
itemStore);
@@ -62,7 +62,7 @@ public SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
6262
return secondaryToPrimaryMapper;
6363
}
6464

65-
public Optional<OnDeleteFilter<R>> onDeleteFilter() {
65+
public Optional<OnDeleteFilter<? super R>> onDeleteFilter() {
6666
return Optional.ofNullable(onDeleteFilter);
6767
}
6868

@@ -95,13 +95,13 @@ public <P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondary
9595
*/
9696
SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper();
9797

98-
Optional<OnAddFilter<R>> onAddFilter();
98+
Optional<OnAddFilter<? super R>> onAddFilter();
9999

100-
Optional<OnUpdateFilter<R>> onUpdateFilter();
100+
Optional<OnUpdateFilter<? super R>> onUpdateFilter();
101101

102-
Optional<OnDeleteFilter<R>> onDeleteFilter();
102+
Optional<OnDeleteFilter<? super R>> onDeleteFilter();
103103

104-
Optional<GenericFilter<R>> genericFilter();
104+
Optional<GenericFilter<? super R>> genericFilter();
105105

106106
<P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondaryMapper();
107107

@@ -113,10 +113,10 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
113113
private Set<String> namespaces;
114114
private String labelSelector;
115115
private final Class<R> resourceClass;
116-
private OnAddFilter<R> onAddFilter;
117-
private OnUpdateFilter<R> onUpdateFilter;
118-
private OnDeleteFilter<R> onDeleteFilter;
119-
private GenericFilter<R> genericFilter;
116+
private OnAddFilter<? super R> onAddFilter;
117+
private OnUpdateFilter<? super R> onUpdateFilter;
118+
private OnDeleteFilter<? super R> onDeleteFilter;
119+
private GenericFilter<? super R> genericFilter;
120120
private boolean inheritControllerNamespacesOnChange = false;
121121
private ItemStore<R> itemStore;
122122

@@ -198,23 +198,25 @@ public InformerConfigurationBuilder<R> withLabelSelector(String labelSelector) {
198198
return this;
199199
}
200200

201-
public InformerConfigurationBuilder<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
201+
public InformerConfigurationBuilder<R> withOnAddFilter(OnAddFilter<? super R> onAddFilter) {
202202
this.onAddFilter = onAddFilter;
203203
return this;
204204
}
205205

206-
public InformerConfigurationBuilder<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
206+
public InformerConfigurationBuilder<R> withOnUpdateFilter(
207+
OnUpdateFilter<? super R> onUpdateFilter) {
207208
this.onUpdateFilter = onUpdateFilter;
208209
return this;
209210
}
210211

211212
public InformerConfigurationBuilder<R> withOnDeleteFilter(
212-
OnDeleteFilter<R> onDeleteFilter) {
213+
OnDeleteFilter<? super R> onDeleteFilter) {
213214
this.onDeleteFilter = onDeleteFilter;
214215
return this;
215216
}
216217

217-
public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> genericFilter) {
218+
public InformerConfigurationBuilder<R> withGenericFilter(
219+
GenericFilter<? super R> genericFilter) {
218220
this.genericFilter = genericFilter;
219221
return this;
220222
}

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ public abstract class AbstractResourceEventSource<R, P extends HasMetadata>
1111
implements ResourceEventSource<R, P> {
1212
private final Class<R> resourceClass;
1313

14-
protected OnAddFilter<R> onAddFilter;
15-
protected OnUpdateFilter<R> onUpdateFilter;
16-
protected OnDeleteFilter<R> onDeleteFilter;
17-
protected GenericFilter<R> genericFilter;
14+
protected OnAddFilter<? super R> onAddFilter;
15+
protected OnUpdateFilter<? super R> onUpdateFilter;
16+
protected OnDeleteFilter<? super R> onDeleteFilter;
17+
protected GenericFilter<? super R> genericFilter;
1818

1919
protected AbstractResourceEventSource(Class<R> resourceClass) {
2020
this.resourceClass = resourceClass;
@@ -25,21 +25,21 @@ public Class<R> resourceType() {
2525
return resourceClass;
2626
}
2727

28-
public void setOnAddFilter(OnAddFilter<R> onAddFilter) {
28+
public void setOnAddFilter(OnAddFilter<? super R> onAddFilter) {
2929
this.onAddFilter = onAddFilter;
3030
}
3131

3232
public void setOnUpdateFilter(
33-
OnUpdateFilter<R> onUpdateFilter) {
33+
OnUpdateFilter<? super R> onUpdateFilter) {
3434
this.onUpdateFilter = onUpdateFilter;
3535
}
3636

3737
public void setOnDeleteFilter(
38-
OnDeleteFilter<R> onDeleteFilter) {
38+
OnDeleteFilter<? super R> onDeleteFilter) {
3939
this.onDeleteFilter = onDeleteFilter;
4040
}
4141

42-
public void setGenericFilter(GenericFilter<R> genericFilter) {
42+
public void setGenericFilter(GenericFilter<? super R> genericFilter) {
4343
this.genericFilter = genericFilter;
4444
}
4545
}

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ default Optional<R> getSecondaryResource(P primary) {
3232

3333
Set<R> getSecondaryResources(P primary);
3434

35-
void setOnAddFilter(OnAddFilter<R> onAddFilter);
35+
void setOnAddFilter(OnAddFilter<? super R> onAddFilter);
3636

37-
void setOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter);
37+
void setOnUpdateFilter(OnUpdateFilter<? super R> onUpdateFilter);
3838

39-
void setOnDeleteFilter(OnDeleteFilter<R> onDeleteFilter);
39+
void setOnDeleteFilter(OnDeleteFilter<? super R> onDeleteFilter);
4040

41-
void setGenericFilter(GenericFilter<R> genericFilter);
41+
void setGenericFilter(GenericFilter<? super R> genericFilter);
4242
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ public class ControllerResourceEventSource<T extends HasMetadata>
3737
private final Controller<T> controller;
3838
private final ResourceEventFilter<T> legacyFilters;
3939

40-
@SuppressWarnings("unchecked")
40+
@SuppressWarnings({"unchecked", "rawtypes"})
4141
public ControllerResourceEventSource(Controller<T> controller) {
4242
super(controller.getCRClient(), controller.getConfiguration());
4343
this.controller = controller;
4444

4545
final var config = controller.getConfiguration();
46-
OnUpdateFilter<T> internalOnUpdateFilter =
46+
OnUpdateFilter internalOnUpdateFilter =
4747
(OnUpdateFilter<T>) onUpdateFinalizerNeededAndApplied(controller.useFinalizer(),
4848
config.getFinalizerName())
4949
.or(onUpdateGenerationAware(config.isGenerationAware()))
@@ -133,7 +133,7 @@ public Set<T> getSecondaryResources(T primary) {
133133
}
134134

135135
@Override
136-
public void setOnDeleteFilter(OnDeleteFilter<T> onDeleteFilter) {
136+
public void setOnDeleteFilter(OnDeleteFilter<? super T> onDeleteFilter) {
137137
throw new IllegalStateException(
138138
"onDeleteFilter is not supported for controller resource event source");
139139
}

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
<assertj.version>3.24.2</assertj.version>
5555
<awaitility.version>4.2.0</awaitility.version>
5656
<spring-boot.version>2.7.3</spring-boot.version>
57-
<micrometer-core.version>1.11.0</micrometer-core.version>
57+
<micrometer-core.version>1.11.1</micrometer-core.version>
5858
<okhttp.version>4.10.0</okhttp.version>
5959
<caffeine.version>3.1.3</caffeine.version>
6060
<jenvtest.version>0.9.0</jenvtest.version>

0 commit comments

Comments
 (0)