Skip to content

improve: filters accept super types #1940

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
private ResourceEventFilter<R> customResourcePredicate;
private final ControllerConfiguration<R> original;
private Duration reconciliationMaxInterval;
private OnAddFilter<R> onAddFilter;
private OnUpdateFilter<R> onUpdateFilter;
private GenericFilter<R> genericFilter;
private OnAddFilter<? super R> onAddFilter;
private OnUpdateFilter<? super R> onUpdateFilter;
private GenericFilter<? super R> genericFilter;
private RateLimiter rateLimiter;
private Map<DependentResourceSpec, Object> configurations;
private ItemStore<R> itemStore;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,17 @@ public class DefaultResourceConfiguration<R extends HasMetadata>

private final Class<R> resourceClass;
private final String resourceTypeName;
private final OnAddFilter<R> onAddFilter;
private final OnUpdateFilter<R> onUpdateFilter;
private final GenericFilter<R> genericFilter;
private final OnAddFilter<? super R> onAddFilter;
private final OnUpdateFilter<? super R> onUpdateFilter;
private final GenericFilter<? super R> genericFilter;
private final String labelSelector;
private final Set<String> namespaces;
private final ItemStore<R> itemStore;

protected DefaultResourceConfiguration(Class<R> resourceClass,
Set<String> namespaces, String labelSelector, OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, ItemStore<R> itemStore) {
Set<String> namespaces, String labelSelector, OnAddFilter<? super R> onAddFilter,
OnUpdateFilter<? super R> onUpdateFilter, GenericFilter<? super R> genericFilter,
ItemStore<R> itemStore) {
this.resourceClass = resourceClass;
this.resourceTypeName = ReconcilerUtils.getResourceTypeName(resourceClass);
this.onAddFilter = onAddFilter;
Expand Down Expand Up @@ -57,16 +58,17 @@ public Class<R> getResourceClass() {
}

@Override
public Optional<OnAddFilter<R>> onAddFilter() {
public Optional<OnAddFilter<? super R>> onAddFilter() {
return Optional.ofNullable(onAddFilter);
}

@Override
public Optional<OnUpdateFilter<R>> onUpdateFilter() {
public Optional<OnUpdateFilter<? super R>> onUpdateFilter() {
return Optional.ofNullable(onUpdateFilter);
}

public Optional<GenericFilter<R>> genericFilter() {
@Override
public Optional<GenericFilter<? super R>> genericFilter() {
return Optional.ofNullable(genericFilter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ protected RateLimiter ensureRateLimiter(RateLimiter given) {
public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
boolean generationAware, String associatedReconcilerClassName, Retry retry,
RateLimiter rateLimiter, Duration maxReconciliationInterval,
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter,
GenericFilter<P> genericFilter,
OnAddFilter<? super P> onAddFilter, OnUpdateFilter<? super P> onUpdateFilter,
GenericFilter<? super P> genericFilter,
List<DependentResourceSpec> dependentResources,
Set<String> namespaces, String finalizer, String labelSelector,
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore,
Expand All @@ -82,7 +82,8 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
boolean generationAware, String associatedReconcilerClassName, Retry retry,
RateLimiter rateLimiter, Duration maxReconciliationInterval,
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter, GenericFilter<P> genericFilter,
OnAddFilter<? super P> onAddFilter, OnUpdateFilter<? super P> onUpdateFilter,
GenericFilter<? super P> genericFilter,
Set<String> namespaces, String finalizer, String labelSelector,
Map<DependentResourceSpec, Object> configurations, ItemStore<P> itemStore,
ConfigurationService configurationService) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ default String getResourceTypeName() {
return ReconcilerUtils.getResourceTypeName(getResourceClass());
}

default Optional<OnAddFilter<R>> onAddFilter() {
default Optional<OnAddFilter<? super R>> onAddFilter() {
return Optional.empty();
}

default Optional<OnUpdateFilter<R>> onUpdateFilter() {
default Optional<OnUpdateFilter<? super R>> onUpdateFilter() {
return Optional.empty();
}

default Optional<GenericFilter<R>> genericFilter() {
default Optional<GenericFilter<? super R>> genericFilter() {
return Optional.empty();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,17 @@ class DefaultInformerConfiguration<R extends HasMetadata> extends
private final PrimaryToSecondaryMapper<?> primaryToSecondaryMapper;
private final SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper;
private final boolean followControllerNamespaceChanges;
private final OnDeleteFilter<R> onDeleteFilter;
private final OnDeleteFilter<? super R> onDeleteFilter;

protected DefaultInformerConfiguration(String labelSelector,
Class<R> resourceClass,
PrimaryToSecondaryMapper<?> primaryToSecondaryMapper,
SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper,
Set<String> namespaces, boolean followControllerNamespaceChanges,
OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter,
OnDeleteFilter<R> onDeleteFilter,
GenericFilter<R> genericFilter,
OnAddFilter<? super R> onAddFilter,
OnUpdateFilter<? super R> onUpdateFilter,
OnDeleteFilter<? super R> onDeleteFilter,
GenericFilter<? super R> genericFilter,
ItemStore<R> itemStore) {
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter,
itemStore);
Expand All @@ -62,7 +62,7 @@ public SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
return secondaryToPrimaryMapper;
}

public Optional<OnDeleteFilter<R>> onDeleteFilter() {
public Optional<OnDeleteFilter<? super R>> onDeleteFilter() {
return Optional.ofNullable(onDeleteFilter);
}

Expand Down Expand Up @@ -95,13 +95,13 @@ public <P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondary
*/
SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper();

Optional<OnAddFilter<R>> onAddFilter();
Optional<OnAddFilter<? super R>> onAddFilter();

Optional<OnUpdateFilter<R>> onUpdateFilter();
Optional<OnUpdateFilter<? super R>> onUpdateFilter();

Optional<OnDeleteFilter<R>> onDeleteFilter();
Optional<OnDeleteFilter<? super R>> onDeleteFilter();

Optional<GenericFilter<R>> genericFilter();
Optional<GenericFilter<? super R>> genericFilter();

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

Expand All @@ -113,10 +113,10 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
private Set<String> namespaces;
private String labelSelector;
private final Class<R> resourceClass;
private OnAddFilter<R> onAddFilter;
private OnUpdateFilter<R> onUpdateFilter;
private OnDeleteFilter<R> onDeleteFilter;
private GenericFilter<R> genericFilter;
private OnAddFilter<? super R> onAddFilter;
private OnUpdateFilter<? super R> onUpdateFilter;
private OnDeleteFilter<? super R> onDeleteFilter;
private GenericFilter<? super R> genericFilter;
private boolean inheritControllerNamespacesOnChange = false;
private ItemStore<R> itemStore;

Expand Down Expand Up @@ -198,23 +198,25 @@ public InformerConfigurationBuilder<R> withLabelSelector(String labelSelector) {
return this;
}

public InformerConfigurationBuilder<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
public InformerConfigurationBuilder<R> withOnAddFilter(OnAddFilter<? super R> onAddFilter) {
this.onAddFilter = onAddFilter;
return this;
}

public InformerConfigurationBuilder<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
public InformerConfigurationBuilder<R> withOnUpdateFilter(
OnUpdateFilter<? super R> onUpdateFilter) {
this.onUpdateFilter = onUpdateFilter;
return this;
}

public InformerConfigurationBuilder<R> withOnDeleteFilter(
OnDeleteFilter<R> onDeleteFilter) {
OnDeleteFilter<? super R> onDeleteFilter) {
this.onDeleteFilter = onDeleteFilter;
return this;
}

public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> genericFilter) {
public InformerConfigurationBuilder<R> withGenericFilter(
GenericFilter<? super R> genericFilter) {
this.genericFilter = genericFilter;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ public abstract class AbstractResourceEventSource<R, P extends HasMetadata>
implements ResourceEventSource<R, P> {
private final Class<R> resourceClass;

protected OnAddFilter<R> onAddFilter;
protected OnUpdateFilter<R> onUpdateFilter;
protected OnDeleteFilter<R> onDeleteFilter;
protected GenericFilter<R> genericFilter;
protected OnAddFilter<? super R> onAddFilter;
protected OnUpdateFilter<? super R> onUpdateFilter;
protected OnDeleteFilter<? super R> onDeleteFilter;
protected GenericFilter<? super R> genericFilter;

protected AbstractResourceEventSource(Class<R> resourceClass) {
this.resourceClass = resourceClass;
Expand All @@ -25,21 +25,21 @@ public Class<R> resourceType() {
return resourceClass;
}

public void setOnAddFilter(OnAddFilter<R> onAddFilter) {
public void setOnAddFilter(OnAddFilter<? super R> onAddFilter) {
this.onAddFilter = onAddFilter;
}

public void setOnUpdateFilter(
OnUpdateFilter<R> onUpdateFilter) {
OnUpdateFilter<? super R> onUpdateFilter) {
this.onUpdateFilter = onUpdateFilter;
}

public void setOnDeleteFilter(
OnDeleteFilter<R> onDeleteFilter) {
OnDeleteFilter<? super R> onDeleteFilter) {
this.onDeleteFilter = onDeleteFilter;
}

public void setGenericFilter(GenericFilter<R> genericFilter) {
public void setGenericFilter(GenericFilter<? super R> genericFilter) {
this.genericFilter = genericFilter;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ default Optional<R> getSecondaryResource(P primary) {

Set<R> getSecondaryResources(P primary);

void setOnAddFilter(OnAddFilter<R> onAddFilter);
void setOnAddFilter(OnAddFilter<? super R> onAddFilter);

void setOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter);
void setOnUpdateFilter(OnUpdateFilter<? super R> onUpdateFilter);

void setOnDeleteFilter(OnDeleteFilter<R> onDeleteFilter);
void setOnDeleteFilter(OnDeleteFilter<? super R> onDeleteFilter);

void setGenericFilter(GenericFilter<R> genericFilter);
void setGenericFilter(GenericFilter<? super R> genericFilter);
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ public class ControllerResourceEventSource<T extends HasMetadata>
private final Controller<T> controller;
private final ResourceEventFilter<T> legacyFilters;

@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "rawtypes"})
public ControllerResourceEventSource(Controller<T> controller) {
super(controller.getCRClient(), controller.getConfiguration());
this.controller = controller;

final var config = controller.getConfiguration();
OnUpdateFilter<T> internalOnUpdateFilter =
OnUpdateFilter internalOnUpdateFilter =
(OnUpdateFilter<T>) onUpdateFinalizerNeededAndApplied(controller.useFinalizer(),
config.getFinalizerName())
.or(onUpdateGenerationAware(config.isGenerationAware()))
Expand Down Expand Up @@ -133,7 +133,7 @@ public Set<T> getSecondaryResources(T primary) {
}

@Override
public void setOnDeleteFilter(OnDeleteFilter<T> onDeleteFilter) {
public void setOnDeleteFilter(OnDeleteFilter<? super T> onDeleteFilter) {
throw new IllegalStateException(
"onDeleteFilter is not supported for controller resource event source");
}
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
<assertj.version>3.24.2</assertj.version>
<awaitility.version>4.2.0</awaitility.version>
<spring-boot.version>2.7.3</spring-boot.version>
<micrometer-core.version>1.11.0</micrometer-core.version>
<micrometer-core.version>1.11.1</micrometer-core.version>
<okhttp.version>4.10.0</okhttp.version>
<caffeine.version>3.1.3</caffeine.version>
<jenvtest.version>0.9.0</jenvtest.version>
Expand Down