Skip to content

refactor: clean up ResourceConfiguration & rename to Informable #2486

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 12 commits into from
Aug 19, 2024
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,9 @@ public <P extends HasMetadata> RegisteredController<P> register(Reconciler<P> re

controllerManager.add(controller);

final var watchedNS = configuration.watchAllNamespaces() ? "[all namespaces]"
: configuration.getEffectiveNamespaces();
final var informerConfig = configuration.getInformerConfig();
final var watchedNS = informerConfig.watchAllNamespaces() ? "[all namespaces]"
: informerConfig.getEffectiveNamespaces(configuration);

log.info(
"Registered reconciler: '{}' for resource: '{}' for namespace(s): {}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ private <P extends HasMetadata> ResolvedControllerConfiguration<P> controllerCon
.buildForController();

return new ResolvedControllerConfiguration<P>(
resourceClass, name, generationAware,
name, generationAware,
associatedReconcilerClass, retry, rateLimiter,
ResolvedControllerConfiguration.getMaxReconciliationInterval(interval, timeUnit),
valueOrDefaultFromAnnotation(annotation,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,7 @@ default ExecutorServiceManager getExecutorServiceManager() {
* SSA based create/update can be still used with the legacy matching, just overriding the match
* method of Kubernetes Dependent Resource.
*
* @return if SSA should be used for dependent resources
* @return {@code true} if SSA should be used for dependent resources, {@code false} otherwise
* @since 4.4.0
*/
default boolean ssaBasedCreateUpdateMatchForDependentResources() {
Expand Down Expand Up @@ -395,6 +395,8 @@ default Set<Class<? extends HasMetadata>> defaultNonSSAResource() {
*
* @return if special annotation should be used for dependent resource to filter events
* @since 4.5.0
*
* @return if special annotation should be used for dependent resource to filter events
*/
default boolean previousAnnotationForDependentResourcesEventFiltering() {
return true;
Expand All @@ -411,6 +413,8 @@ default boolean previousAnnotationForDependentResourcesEventFiltering() {
*
* @return if resource version should be parsed (as integer)
* @since 4.5.0
*
* @return if resource version should be parsed (as integer)
*/
default boolean parseResourceVersionsForEventFilteringAndCaching() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
import io.javaoperatorsdk.operator.processing.retry.Retry;

public interface ControllerConfiguration<P extends HasMetadata> extends ResourceConfiguration<P> {
public interface ControllerConfiguration<P extends HasMetadata> extends Informable<P> {

@SuppressWarnings("rawtypes")
RateLimiter DEFAULT_RATE_LIMITER = LinearRateLimiter.deactivatedRateLimiter();
Expand Down Expand Up @@ -74,19 +74,9 @@ default Optional<Duration> maxReconciliationInterval() {

ConfigurationService getConfigurationService();

@SuppressWarnings("unchecked")
@Override
default Class<P> getResourceClass() {
// note that this implementation at the end not used within the boundaries of the core
// framework, should be removed in the future, (and marked as an API changed, or behavior
// change)
return (Class<P>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(getClass(),
ControllerConfiguration.class);
}

@SuppressWarnings("unused")
default Set<String> getEffectiveNamespaces() {
return ResourceConfiguration.super.getEffectiveNamespaces(this);
return getInformerConfig().getEffectiveNamespaces(this);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,8 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
this.finalizer = original.getFinalizerName();
this.generationAware = original.isGenerationAware();
this.config = InformerConfiguration.builder(original.getResourceClass())
.withName(name)
.withNamespaces(original.getNamespaces())
.withLabelSelector(original.getLabelSelector())
.withOnAddFilter(original.onAddFilter().orElse(null))
.withOnUpdateFilter(original.onUpdateFilter().orElse(null))
.withGenericFilter(original.genericFilter().orElse(null))
.withInformerListLimit(original.getInformerListLimit().orElse(null))
.withItemStore(original.getItemStore().orElse(null));
final var informerConfig = original.getInformerConfig();
this.config = InformerConfiguration.builder(informerConfig);
this.retry = original.getRetry();
this.reconciliationMaxInterval = original.maxReconciliationInterval().orElse(null);
this.original = original;
Expand Down Expand Up @@ -194,7 +187,7 @@ public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig
}

public ControllerConfiguration<R> build() {
return new ResolvedControllerConfiguration<>(original.getResourceClass(),
return new ResolvedControllerConfiguration<>(
name,
generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter,
reconciliationMaxInterval,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.javaoperatorsdk.operator.api.config;


import io.fabric8.kubernetes.api.model.HasMetadata;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;

public interface Informable<R extends HasMetadata> {

default String getResourceTypeName() {
return getInformerConfig().getResourceTypeName();
}

InformerConfiguration<R> getInformerConfig();

default Class<R> getResourceClass() {
return getInformerConfig().getResourceClass();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

@SuppressWarnings("rawtypes")
public class ResolvedControllerConfiguration<P extends HasMetadata>
extends DefaultResourceConfiguration<P>
implements io.javaoperatorsdk.operator.api.config.ControllerConfiguration<P> {

private final InformerConfiguration<P> informerConfig;
private final String name;
private final boolean generationAware;
private final String associatedReconcilerClassName;
Expand All @@ -31,8 +31,8 @@ public class ResolvedControllerConfiguration<P extends HasMetadata>
private final String fieldManager;
private WorkflowSpec workflowSpec;

public ResolvedControllerConfiguration(Class<P> resourceClass, ControllerConfiguration<P> other) {
this(resourceClass, other.getName(), other.isGenerationAware(),
public ResolvedControllerConfiguration(ControllerConfiguration<P> other) {
this(other.getName(), other.isGenerationAware(),
other.getAssociatedReconcilerClassName(), other.getRetry(), other.getRateLimiter(),
other.maxReconciliationInterval().orElse(null),
other.getFinalizerName(), Collections.emptyMap(),
Expand All @@ -42,7 +42,7 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, ControllerConfigu
other.getWorkflowSpec().orElse(null));
}

public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
public ResolvedControllerConfiguration(String name,
boolean generationAware, String associatedReconcilerClassName, Retry retry,
RateLimiter rateLimiter, Duration maxReconciliationInterval,
String finalizer,
Expand All @@ -51,19 +51,19 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
ConfigurationService configurationService,
InformerConfiguration<P> informerConfig,
WorkflowSpec workflowSpec) {
this(resourceClass, name, generationAware, associatedReconcilerClassName, retry, rateLimiter,
this(name, generationAware, associatedReconcilerClassName, retry, rateLimiter,
maxReconciliationInterval, finalizer, configurations, fieldManager,
configurationService, informerConfig);
setWorkflowSpec(workflowSpec);
}

protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
protected ResolvedControllerConfiguration(String name,
boolean generationAware, String associatedReconcilerClassName, Retry retry,
RateLimiter rateLimiter, Duration maxReconciliationInterval, String finalizer,
Map<DependentResourceSpec, Object> configurations,
String fieldManager,
ConfigurationService configurationService, InformerConfiguration<P> informerConfig) {
super(resourceClass, informerConfig);
this.informerConfig = informerConfig;
this.configurationService = configurationService;
this.name = ControllerConfiguration.ensureValidName(name, associatedReconcilerClassName);
this.generationAware = generationAware;
Expand All @@ -79,11 +79,16 @@ protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,

protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
Class<? extends Reconciler> reconcilerClas, ConfigurationService configurationService) {
this(resourceClass, name, false, getAssociatedReconcilerClassName(reconcilerClas), null, null,
this(name, false, getAssociatedReconcilerClassName(reconcilerClas), null, null,
null, null, null, null, configurationService,
InformerConfiguration.builder(resourceClass).buildForController());
}

@Override
public InformerConfiguration<P> getInformerConfig() {
return informerConfig;
}

public static Duration getMaxReconciliationInterval(long interval, TimeUnit timeUnit) {
return interval > 0 ? Duration.of(interval, timeUnit.toChronoUnit()) : null;
}
Expand Down

This file was deleted.

Loading
Loading