Skip to content

Commit eb2e5fa

Browse files
authored
refactor: ReconciliationMaxInterval -> MaxReconciliationInterval (#1343)
1 parent c9246c8 commit eb2e5fa

File tree

12 files changed

+61
-27
lines changed

12 files changed

+61
-27
lines changed

docs/documentation/v3-1-migration.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ permalink: /docs/v3-1-migration
77

88
# Migrating from v3 to v3.1
99

10+
## ReconciliationMaxInterval Annotation has been renamed to MaxReconciliationInterval
11+
12+
Associated methods on both the `ControllerConfiguration` class and annotation have also been
13+
renamed accordingly.
14+
1015
## Workflows Impact on Managed Dependent Resources Behavior
1116

1217
Version 3.1 comes with a workflow engine that replaces the previous behavior of managed dependent

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@
3030
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
3131
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
3232
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilters;
33-
import io.javaoperatorsdk.operator.processing.event.source.filter.*;
33+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
34+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
35+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
36+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
37+
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidGenericFilter;
38+
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnAddFilter;
39+
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnDeleteFilter;
40+
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnUpdateFilter;
3441
import io.javaoperatorsdk.operator.processing.retry.Retry;
3542

3643
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
@@ -135,18 +142,12 @@ public ResourceEventFilter<P> getEventFilter() {
135142
}
136143

137144
@Override
138-
public Optional<Duration> reconciliationMaxInterval() {
139-
if (annotation.reconciliationMaxInterval() != null) {
140-
if (annotation.reconciliationMaxInterval().interval() <= 0) {
141-
return Optional.empty();
142-
}
143-
return Optional.of(
144-
Duration.of(
145-
annotation.reconciliationMaxInterval().interval(),
146-
annotation.reconciliationMaxInterval().timeUnit().toChronoUnit()));
147-
} else {
148-
return io.javaoperatorsdk.operator.api.config.ControllerConfiguration.super.reconciliationMaxInterval();
145+
public Optional<Duration> maxReconciliationInterval() {
146+
final var newConfig = annotation.maxReconciliationInterval();
147+
if (newConfig != null && newConfig.interval() > 0) {
148+
return Optional.of(Duration.of(newConfig.interval(), newConfig.timeUnit().toChronoUnit()));
149149
}
150+
return Optional.empty();
150151
}
151152

152153
@Override

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.fabric8.kubernetes.api.model.HasMetadata;
99
import io.javaoperatorsdk.operator.ReconcilerUtils;
1010
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
11+
import io.javaoperatorsdk.operator.api.reconciler.MaxReconciliationInterval;
1112
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1213
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
1314
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
@@ -18,6 +19,7 @@
1819

1920
public interface ControllerConfiguration<R extends HasMetadata> extends ResourceConfiguration<R> {
2021

22+
@SuppressWarnings("rawtypes")
2123
RateLimiter DEFAULT_RATE_LIMITER = LinearRateLimiter.deactivatedRateLimiter();
2224

2325
default String getName() {
@@ -53,6 +55,7 @@ default RetryConfiguration getRetryConfiguration() {
5355
return RetryConfiguration.DEFAULT;
5456
}
5557

58+
@SuppressWarnings("rawtypes")
5659
default RateLimiter getRateLimiter() {
5760
return DEFAULT_RATE_LIMITER;
5861
}
@@ -77,8 +80,8 @@ default List<DependentResourceSpec> getDependentResources() {
7780
return Collections.emptyList();
7881
}
7982

80-
default Optional<Duration> reconciliationMaxInterval() {
81-
return Optional.of(Duration.ofHours(10L));
83+
default Optional<Duration> maxReconciliationInterval() {
84+
return Optional.of(Duration.ofHours(MaxReconciliationInterval.DEFAULT_INTERVAL));
8285
}
8386

8487
@SuppressWarnings("unused")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4747
retry = original.getRetry();
4848
labelSelector = original.getLabelSelector();
4949
customResourcePredicate = original.getEventFilter();
50-
reconciliationMaxInterval = original.reconciliationMaxInterval().orElse(null);
50+
reconciliationMaxInterval = original.maxReconciliationInterval().orElse(null);
5151
// make the original specs modifiable
5252
final var dependentResources = original.getDependentResources();
5353
namedDependentResourceSpecs = new LinkedHashMap<>(dependentResources.size());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public List<DependentResourceSpec> getDependentResources() {
108108
}
109109

110110
@Override
111-
public Optional<Duration> reconciliationMaxInterval() {
111+
public Optional<Duration> maxReconciliationInterval() {
112112
return Optional.ofNullable(reconciliationMaxInterval);
113113
}
114114

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ public final class Constants {
1616
public static final String NO_VALUE_SET = "";
1717
public static final String WATCH_CURRENT_NAMESPACE = "JOSDK_WATCH_CURRENT";
1818
public static final String WATCH_ALL_NAMESPACES = "JOSDK_ALL_NAMESPACES";
19-
public static final long NO_RECONCILIATION_MAX_INTERVAL = -1L;
19+
20+
public static final long NO_MAX_RECONCILIATION_INTERVAL = -1L;
2021
public static final String SAME_AS_CONTROLLER = "JOSDK_SAME_AS_CONTROLLER";
2122

2223
public static final String RESOURCE_GVK_KEY = "josdk.resource.gvk";

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@
9191
* Optional configuration of the maximal interval the SDK will wait for a reconciliation request
9292
* to happen before one will be automatically triggered.
9393
*
94-
* @return the maximal interval configuration
94+
* @return the maximal reconciliation interval configuration
9595
*/
96-
ReconciliationMaxInterval reconciliationMaxInterval() default @ReconciliationMaxInterval(
97-
interval = ReconciliationMaxInterval.DEFAULT_INTERVAL);
96+
MaxReconciliationInterval maxReconciliationInterval() default @MaxReconciliationInterval(
97+
interval = MaxReconciliationInterval.DEFAULT_INTERVAL);
9898

9999

100100
/**
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88

99
@Retention(RetentionPolicy.RUNTIME)
1010
@Target({ElementType.TYPE})
11-
public @interface ReconciliationMaxInterval {
11+
public @interface MaxReconciliationInterval {
12+
1213
long DEFAULT_INTERVAL = 10;
1314

1415
/**
@@ -23,7 +24,7 @@
2324
* This is a fail-safe feature, in the sense that if informers are in place and the reconciler
2425
* implementation is correct, this feature can be turned off.
2526
* <p>
26-
* Use NO_RECONCILIATION_MAX_INTERVAL in {@link Constants} to turn off this feature.
27+
* Use {@link Constants#NO_MAX_RECONCILIATION_INTERVAL} to turn off this feature.
2728
*
2829
* @return max delay between reconciliations
2930
**/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ private void updatePostExecutionControlWithReschedule(
270270
PostExecutionControl<R> postExecutionControl,
271271
BaseControl<?> baseControl) {
272272
baseControl.getScheduleDelay().ifPresentOrElse(postExecutionControl::withReSchedule,
273-
() -> controller.getConfiguration().reconciliationMaxInterval()
273+
() -> controller.getConfiguration().maxReconciliationInterval()
274274
.ifPresent(m -> postExecutionControl.withReSchedule(m.toMillis())));
275275
}
276276

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private <R extends HasMetadata> ReconciliationDispatcher<R> init(R customResourc
111111
when(configuration.getName()).thenReturn("EventDispatcherTestController");
112112
when(configuration.getResourceClass()).thenReturn(resourceClass);
113113
when(configuration.getRetry()).thenReturn(new GenericRetry());
114-
when(configuration.reconciliationMaxInterval())
114+
when(configuration.maxReconciliationInterval())
115115
.thenReturn(Optional.of(Duration.ofHours(RECONCILIATION_MAX_INTERVAL)));
116116

117117
Controller<R> controller = new Controller<>(reconciler, configuration,
@@ -618,7 +618,7 @@ void canSkipSchedulingMaxDelayIf() {
618618
testCustomResource.addFinalizer(DEFAULT_FINALIZER);
619619

620620
reconciler.reconcile = (r, c) -> UpdateControl.noUpdate();
621-
when(reconciliationDispatcher.configuration().reconciliationMaxInterval())
621+
when(reconciliationDispatcher.configuration().maxReconciliationInterval())
622622
.thenReturn(Optional.empty());
623623

624624
PostExecutionControl control =

operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/AnnotationControllerConfigurationTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.List;
99
import java.util.Optional;
1010
import java.util.Set;
11+
import java.util.concurrent.TimeUnit;
1112

1213
import org.junit.jupiter.api.Assertions;
1314
import org.junit.jupiter.api.Test;
@@ -18,6 +19,7 @@
1819
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1920
import io.javaoperatorsdk.operator.api.reconciler.Context;
2021
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
22+
import io.javaoperatorsdk.operator.api.reconciler.MaxReconciliationInterval;
2123
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2224
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2325
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
@@ -129,6 +131,11 @@ && findByNameOptional(dependents, DependentResource.defaultNameFor(ReadOnlyDepen
129131
.isPresent());
130132
}
131133

134+
@Test
135+
void maxIntervalCanBeConfigured() {
136+
var config = new AnnotationControllerConfiguration<>(new MaxIntervalReconciler());
137+
assertEquals(50, config.maxReconciliationInterval().map(Duration::getSeconds).orElseThrow());
138+
}
132139

133140
@Test
134141
void checkDefaultRateAndRetryConfigurations() {
@@ -169,6 +176,18 @@ void checkingRetryingGraduallyWorks() {
169176
assertEquals(CheckRetryingGraduallyConfiguration.MAX_INTERVAL, genericRetry.getMaxInterval());
170177
}
171178

179+
@ControllerConfiguration(
180+
maxReconciliationInterval = @MaxReconciliationInterval(interval = 50,
181+
timeUnit = TimeUnit.SECONDS))
182+
private static class MaxIntervalReconciler implements Reconciler<ConfigMap> {
183+
184+
@Override
185+
public UpdateControl<ConfigMap> reconcile(ConfigMap resource, Context<ConfigMap> context)
186+
throws Exception {
187+
return null;
188+
}
189+
}
190+
172191
@ControllerConfiguration(namespaces = OneDepReconciler.CONFIGURED_NS,
173192
dependents = @Dependent(type = ReadOnlyDependent.class))
174193
private static class OneDepReconciler implements Reconciler<ConfigMap> {

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/maxinterval/MaxIntervalTestReconciler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
import java.util.concurrent.TimeUnit;
44
import java.util.concurrent.atomic.AtomicInteger;
55

6-
import io.javaoperatorsdk.operator.api.reconciler.*;
6+
import io.javaoperatorsdk.operator.api.reconciler.Context;
7+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
8+
import io.javaoperatorsdk.operator.api.reconciler.MaxReconciliationInterval;
9+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
10+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
711
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
812

9-
@ControllerConfiguration(reconciliationMaxInterval = @ReconciliationMaxInterval(interval = 50,
13+
@ControllerConfiguration(maxReconciliationInterval = @MaxReconciliationInterval(interval = 50,
1014
timeUnit = TimeUnit.MILLISECONDS))
1115
public class MaxIntervalTestReconciler
1216
implements Reconciler<MaxIntervalTestCustomResource>, TestExecutionInfoProvider {

0 commit comments

Comments
 (0)