Skip to content

feat: explicit interfaces for filters #1333

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 1 commit into from
Jul 13, 2022
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 @@ -10,9 +10,7 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import io.fabric8.kubernetes.api.model.HasMetadata;
Expand All @@ -32,10 +30,7 @@
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilters;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidGenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnDeleteFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnUpdateFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.*;
import io.javaoperatorsdk.operator.processing.retry.Retry;

import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
Expand Down Expand Up @@ -194,8 +189,8 @@ private <T> T instantiateAndConfigureIfNeeded(Class<? extends T> targetClass,

@Override
@SuppressWarnings("unchecked")
public Optional<Predicate<P>> onAddFilter() {
return (Optional<Predicate<P>>) createFilter(annotation.onAddFilter(), FilterType.onAdd,
public Optional<OnAddFilter<P>> onAddFilter() {
return (Optional<OnAddFilter<P>>) createFilter(annotation.onAddFilter(), FilterType.onAdd,
annotation.getClass().getSimpleName());
}

Expand Down Expand Up @@ -229,15 +224,15 @@ private <T> Optional<T> createFilter(Class<T> filter, FilterType filterType, Str

@SuppressWarnings("unchecked")
@Override
public Optional<BiPredicate<P, P>> onUpdateFilter() {
return (Optional<BiPredicate<P, P>>) createFilter(annotation.onUpdateFilter(),
public Optional<OnUpdateFilter<P>> onUpdateFilter() {
return (Optional<OnUpdateFilter<P>>) createFilter(annotation.onUpdateFilter(),
FilterType.onUpdate, annotation.getClass().getSimpleName());
}

@SuppressWarnings("unchecked")
@Override
public Optional<Predicate<P>> genericFilter() {
return (Optional<Predicate<P>>) createFilter(annotation.genericFilter(),
public Optional<GenericFilter<P>> genericFilter() {
return (Optional<GenericFilter<P>>) createFilter(annotation.genericFilter(),
FilterType.generic, annotation.getClass().getSimpleName());
}

Expand Down Expand Up @@ -310,10 +305,10 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
var namespaces = getNamespaces();
var configuredNS = false;
String labelSelector = null;
Predicate<? extends HasMetadata> onAddFilter = null;
BiPredicate<? extends HasMetadata, ? extends HasMetadata> onUpdateFilter = null;
BiPredicate<? extends HasMetadata, Boolean> onDeleteFilter = null;
Predicate<? extends HasMetadata> genericFilter = null;
OnAddFilter<? extends HasMetadata> onAddFilter = null;
OnUpdateFilter<? extends HasMetadata> onUpdateFilter = null;
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
GenericFilter<? extends HasMetadata> genericFilter = null;
if (kubeDependent != null) {
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES,
kubeDependent.namespaces())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
import java.util.stream.Collectors;

Expand All @@ -15,6 +14,9 @@
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig;
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
import io.javaoperatorsdk.operator.processing.retry.Retry;

Expand All @@ -33,9 +35,9 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
private final ControllerConfiguration<R> original;
private Duration reconciliationMaxInterval;
private final LinkedHashMap<String, DependentResourceSpec> namedDependentResourceSpecs;
private Predicate<R> onAddFilter;
private BiPredicate<R, R> onUpdateFilter;
private Predicate<R> genericFilter;
private OnAddFilter<R> onAddFilter;
private OnUpdateFilter<R> onUpdateFilter;
private GenericFilter<R> genericFilter;
private RateLimiter rateLimiter;

private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
Expand Down Expand Up @@ -142,17 +144,17 @@ public ControllerConfigurationOverrider<R> withReconciliationMaxInterval(
return this;
}

public ControllerConfigurationOverrider<R> withOnAddFilter(Predicate<R> onAddFilter) {
public ControllerConfigurationOverrider<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
this.onAddFilter = onAddFilter;
return this;
}

public ControllerConfigurationOverrider<R> withOnUpdateFilter(BiPredicate<R, R> onUpdateFilter) {
public ControllerConfigurationOverrider<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
this.onUpdateFilter = onUpdateFilter;
return this;
}

public ControllerConfigurationOverrider<R> withGenericFilter(Predicate<R> genericFilter) {
public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> genericFilter) {
this.genericFilter = genericFilter;
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
import io.javaoperatorsdk.operator.processing.retry.Retry;

@SuppressWarnings("rawtypes")
Expand Down Expand Up @@ -44,9 +45,9 @@ public DefaultControllerConfiguration(
ResourceEventFilter<R> resourceEventFilter,
Class<R> resourceClass,
Duration reconciliationMaxInterval,
Predicate<R> onAddFilter,
BiPredicate<R, R> onUpdateFilter,
Predicate<R> genericFilter,
OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter,
GenericFilter<R> genericFilter,
RateLimiter rateLimiter,
List<DependentResourceSpec> dependents) {
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;

import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;

Expand All @@ -15,21 +16,21 @@ public class DefaultResourceConfiguration<R extends HasMetadata>
private final String labelSelector;
private final Set<String> namespaces;
private final Class<R> resourceClass;
private final Predicate<R> onAddFilter;
private final BiPredicate<R, R> onUpdateFilter;
private final Predicate<R> genericFilter;
private final OnAddFilter<R> onAddFilter;
private final OnUpdateFilter<R> onUpdateFilter;
private final GenericFilter<R> genericFilter;

public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass,
Predicate<R> onAddFilter,
BiPredicate<R, R> onUpdateFilter, Predicate<R> genericFilter, String... namespaces) {
OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, String... namespaces) {
this(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter,
namespaces == null || namespaces.length == 0 ? DEFAULT_NAMESPACES_SET
: Set.of(namespaces));
}

public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass,
Predicate<R> onAddFilter,
BiPredicate<R, R> onUpdateFilter, Predicate<R> genericFilter, Set<String> namespaces) {
OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, Set<String> namespaces) {
this.labelSelector = labelSelector;
this.resourceClass = resourceClass;
this.onAddFilter = onAddFilter;
Expand Down Expand Up @@ -61,16 +62,16 @@ public Class<R> getResourceClass() {
}

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

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

public Optional<Predicate<R>> genericFilter() {
public Optional<GenericFilter<R>> genericFilter() {
return Optional.ofNullable(genericFilter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import java.util.Collections;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.OperatorException;
import io.javaoperatorsdk.operator.ReconcilerUtils;
import io.javaoperatorsdk.operator.api.reconciler.Constants;
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;

import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_CURRENT_NAMESPACE_SET;
Expand All @@ -20,15 +21,15 @@ default String getResourceTypeName() {
return ReconcilerUtils.getResourceTypeName(getResourceClass());
}

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

default Optional<BiPredicate<R, R>> onUpdateFilter() {
default Optional<OnUpdateFilter<R>> onUpdateFilter() {
return Optional.empty();
}

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.api.config.DefaultResourceConfiguration;
Expand All @@ -13,6 +11,10 @@
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper;
import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers;

import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
Expand All @@ -26,17 +28,17 @@ class DefaultInformerConfiguration<R extends HasMetadata> extends
private final PrimaryToSecondaryMapper<?> primaryToSecondaryMapper;
private final SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper;
private final boolean followControllerNamespaceChanges;
private final BiPredicate<R, Boolean> onDeleteFilter;
private final OnDeleteFilter<R> onDeleteFilter;

protected DefaultInformerConfiguration(String labelSelector,
Class<R> resourceClass,
PrimaryToSecondaryMapper<?> primaryToSecondaryMapper,
SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper,
Set<String> namespaces, boolean followControllerNamespaceChanges,
Predicate<R> onAddFilter,
BiPredicate<R, R> onUpdateFilter,
BiPredicate<R, Boolean> onDeleteFilter,
Predicate<R> genericFilter) {
OnAddFilter<R> onAddFilter,
OnUpdateFilter<R> onUpdateFilter,
OnDeleteFilter<R> onDeleteFilter,
GenericFilter<R> genericFilter) {
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces);
this.followControllerNamespaceChanges = followControllerNamespaceChanges;

Expand All @@ -57,7 +59,7 @@ public SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
return secondaryToPrimaryMapper;
}

public Optional<BiPredicate<R, Boolean>> onDeleteFilter() {
public Optional<OnDeleteFilter<R>> onDeleteFilter() {
return Optional.ofNullable(onDeleteFilter);
}

Expand All @@ -77,13 +79,13 @@ public <P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondary

SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper();

Optional<Predicate<R>> onAddFilter();
Optional<OnAddFilter<R>> onAddFilter();

Optional<BiPredicate<R, R>> onUpdateFilter();
Optional<OnUpdateFilter<R>> onUpdateFilter();

Optional<BiPredicate<R, Boolean>> onDeleteFilter();
Optional<OnDeleteFilter<R>> onDeleteFilter();

Optional<Predicate<R>> genericFilter();
Optional<GenericFilter<R>> genericFilter();

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

Expand All @@ -95,10 +97,10 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
private Set<String> namespaces;
private String labelSelector;
private final Class<R> resourceClass;
private Predicate<R> onAddFilter;
private BiPredicate<R, R> onUpdateFilter;
private BiPredicate<R, Boolean> onDeleteFilter;
private Predicate<R> genericFilter;
private OnAddFilter<R> onAddFilter;
private OnUpdateFilter<R> onUpdateFilter;
private OnDeleteFilter<R> onDeleteFilter;
private GenericFilter<R> genericFilter;
private boolean inheritControllerNamespacesOnChange = false;

private InformerConfigurationBuilder(Class<R> resourceClass) {
Expand Down Expand Up @@ -179,23 +181,23 @@ public InformerConfigurationBuilder<R> withLabelSelector(String labelSelector) {
return this;
}

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

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

public InformerConfigurationBuilder<R> withOnDeleteFilter(
BiPredicate<R, Boolean> onDeleteFilter) {
OnDeleteFilter<R> onDeleteFilter) {
this.onDeleteFilter = onDeleteFilter;
return this;
}

public InformerConfigurationBuilder<R> withGenericFilter(Predicate<R> genericFilter) {
public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> genericFilter) {
this.genericFilter = genericFilter;
return this;
}
Expand Down
Loading