Skip to content

Commit 2f8ecaf

Browse files
authored
Revert "feat: moving cache sync timeout to controller level (#1576)" (#1583)
This reverts commit eafe869.
1 parent eafe869 commit 2f8ecaf

17 files changed

+44
-84
lines changed

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,6 @@ public List<DependentResourceSpec> getDependentResources() {
252252
return specs;
253253
}
254254

255-
@Override
256-
public Duration cacheSyncTimeout() {
257-
var cacheSyncTimeout = annotation.cacheSyncTimeout();
258-
return Duration.of(cacheSyncTimeout.timeout(), cacheSyncTimeout.timeUnit().toChronoUnit());
259-
}
260-
261255
private String getName(Dependent dependent, Class<? extends DependentResource> dependentType) {
262256
var name = dependent.name();
263257
if (name.isBlank()) {

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3+
import java.time.Duration;
34
import java.util.Optional;
45
import java.util.Set;
56
import java.util.concurrent.ExecutorService;
@@ -168,6 +169,15 @@ default boolean stopOnInformerErrorDuringStartup() {
168169
return true;
169170
}
170171

172+
/**
173+
* Timeout for cache sync in milliseconds. In other words source start timeout. Note that is
174+
* "stopOnInformerErrorDuringStartup" is true the operator will stop on timeout. Default is 2
175+
* minutes.
176+
*/
177+
default Duration cacheSyncTimeout() {
178+
return Duration.ofMinutes(2);
179+
}
180+
171181
/**
172182
* Handler for an informer stop. Informer stops if there is a non-recoverable error. Like received
173183
* a resource that cannot be deserialized.

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3+
import java.time.Duration;
34
import java.util.Optional;
45
import java.util.Set;
56
import java.util.concurrent.ExecutorService;
@@ -28,6 +29,7 @@ public class ConfigurationServiceOverrider {
2829
private LeaderElectionConfiguration leaderElectionConfiguration;
2930
private InformerStoppedHandler informerStoppedHandler;
3031
private Boolean stopOnInformerErrorDuringStartup;
32+
private Duration cacheSyncTimeout;
3133

3234
ConfigurationServiceOverrider(ConfigurationService original) {
3335
this.original = original;
@@ -106,6 +108,11 @@ public ConfigurationServiceOverrider withStopOnInformerErrorDuringStartup(
106108
return this;
107109
}
108110

111+
public ConfigurationServiceOverrider withCacheSyncTimeout(Duration cacheSyncTimeout) {
112+
this.cacheSyncTimeout = cacheSyncTimeout;
113+
return this;
114+
}
115+
109116
public ConfigurationService build() {
110117
return new BaseConfigurationService(original.getVersion(), cloner, objectMapper) {
111118
@Override
@@ -184,6 +191,11 @@ public boolean stopOnInformerErrorDuringStartup() {
184191
return stopOnInformerErrorDuringStartup != null ? stopOnInformerErrorDuringStartup
185192
: super.stopOnInformerErrorDuringStartup();
186193
}
194+
195+
@Override
196+
public Duration cacheSyncTimeout() {
197+
return cacheSyncTimeout != null ? cacheSyncTimeout : super.cacheSyncTimeout();
198+
}
187199
};
188200
}
189201

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import io.javaoperatorsdk.operator.processing.retry.GradualRetry;
1818
import io.javaoperatorsdk.operator.processing.retry.Retry;
1919

20-
public interface ControllerConfiguration<P extends HasMetadata> extends ResourceConfiguration<P> {
20+
public interface ControllerConfiguration<R extends HasMetadata> extends ResourceConfiguration<R> {
2121

2222
@SuppressWarnings("rawtypes")
2323
RateLimiter DEFAULT_RATE_LIMITER = LinearRateLimiter.deactivatedRateLimiter();
@@ -71,7 +71,7 @@ default RateLimiter getRateLimiter() {
7171
*
7272
* @return filter
7373
*/
74-
default ResourceEventFilter<P> getEventFilter() {
74+
default ResourceEventFilter<R> getEventFilter() {
7575
return ResourceEventFilters.passthrough();
7676
}
7777

@@ -91,8 +91,8 @@ default ConfigurationService getConfigurationService() {
9191

9292
@SuppressWarnings("unchecked")
9393
@Override
94-
default Class<P> getResourceClass() {
95-
return (Class<P>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(getClass(),
94+
default Class<R> getResourceClass() {
95+
return (Class<R>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(getClass(),
9696
ControllerConfiguration.class);
9797
}
9898
}

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3838
private OnUpdateFilter<R> onUpdateFilter;
3939
private GenericFilter<R> genericFilter;
4040
private RateLimiter rateLimiter;
41-
private Duration cacheSyncTimeout;
4241

4342
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
4443
finalizer = original.getFinalizerName();
@@ -57,7 +56,6 @@ private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
5756
dependentResources.forEach(drs -> namedDependentResourceSpecs.put(drs.getName(), drs));
5857
this.original = original;
5958
this.rateLimiter = original.getRateLimiter();
60-
this.cacheSyncTimeout = original.cacheSyncTimeout();
6159
}
6260

6361
public ControllerConfigurationOverrider<R> withFinalizer(String finalizer) {
@@ -178,11 +176,6 @@ public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig
178176
return this;
179177
}
180178

181-
public ControllerConfigurationOverrider<R> withCacheSyncTimeout(Duration cacheSyncTimeout) {
182-
this.cacheSyncTimeout = cacheSyncTimeout;
183-
return this;
184-
}
185-
186179
public ControllerConfiguration<R> build() {
187180
final var hasModifiedNamespaces = !original.getNamespaces().equals(namespaces);
188181
final var newDependentSpecs = namedDependentResourceSpecs.values().stream()
@@ -215,7 +208,6 @@ public ControllerConfiguration<R> build() {
215208
onUpdateFilter,
216209
genericFilter,
217210
rateLimiter,
218-
cacheSyncTimeout,
219211
newDependentSpecs);
220212
}
221213

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public class DefaultControllerConfiguration<R extends HasMetadata>
3131
private final List<DependentResourceSpec> dependents;
3232
private final Duration reconciliationMaxInterval;
3333
private final RateLimiter rateLimiter;
34-
private final Duration cacheSyncTimeout;
3534

3635
// NOSONAR constructor is meant to provide all information
3736
public DefaultControllerConfiguration(
@@ -50,7 +49,6 @@ public DefaultControllerConfiguration(
5049
OnUpdateFilter<R> onUpdateFilter,
5150
GenericFilter<R> genericFilter,
5251
RateLimiter rateLimiter,
53-
Duration cacheSyncTimeout,
5452
List<DependentResourceSpec> dependents) {
5553
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces);
5654
this.associatedControllerClassName = associatedControllerClassName;
@@ -67,7 +65,6 @@ public DefaultControllerConfiguration(
6765
this.rateLimiter =
6866
rateLimiter != null ? rateLimiter : LinearRateLimiter.deactivatedRateLimiter();
6967
this.dependents = dependents != null ? dependents : Collections.emptyList();
70-
this.cacheSyncTimeout = cacheSyncTimeout;
7168
}
7269

7370
@Override
@@ -119,8 +116,4 @@ public Optional<Duration> maxReconciliationInterval() {
119116
public RateLimiter getRateLimiter() {
120117
return rateLimiter;
121118
}
122-
123-
public Duration cacheSyncTimeout() {
124-
return cacheSyncTimeout;
125-
}
126119
}

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package io.javaoperatorsdk.operator.api.config;
22

3-
import java.time.Duration;
43
import java.util.Collections;
54
import java.util.Optional;
65
import java.util.Set;
76

87
import io.fabric8.kubernetes.api.model.HasMetadata;
98
import io.javaoperatorsdk.operator.OperatorException;
109
import io.javaoperatorsdk.operator.ReconcilerUtils;
11-
import io.javaoperatorsdk.operator.api.reconciler.CacheSyncTimeout;
1210
import io.javaoperatorsdk.operator.api.reconciler.Constants;
1311
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
1412
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
@@ -110,13 +108,4 @@ default Set<String> getEffectiveNamespaces() {
110108
}
111109
return targetNamespaces;
112110
}
113-
114-
/**
115-
* Timeout for cache sync. In other words event source start timeout. Note that is
116-
* "stopOnInformerErrorDuringStartup" is true the operator will stop on timeout. Default is 2
117-
* minutes.
118-
*/
119-
default Duration cacheSyncTimeout() {
120-
return Duration.ofMinutes(CacheSyncTimeout.DEFAULT_TIMEOUT);
121-
}
122111
}

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

Lines changed: 0 additions & 19 deletions
This file was deleted.

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,4 @@ MaxReconciliationInterval maxReconciliationInterval() default @MaxReconciliation
118118
* accessible no-arg constructor.
119119
*/
120120
Class<? extends RateLimiter> rateLimiter() default LinearRateLimiter.class;
121-
122-
CacheSyncTimeout cacheSyncTimeout() default @CacheSyncTimeout(
123-
timeout = CacheSyncTimeout.DEFAULT_TIMEOUT);
124121
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public EventSourceManager(Controller<P> controller) {
4848

4949
public void postProcessDefaultEventSourcesAfterProcessorInitializer() {
5050
eventSources.controllerResourceEventSource().setEventHandler(controller.getEventProcessor());
51-
5251
eventSources.retryEventSource().setEventHandler(controller.getEventProcessor());
5352
}
5453

@@ -120,7 +119,6 @@ public final void registerEventSource(EventSource eventSource) throws OperatorEx
120119
registerEventSource(null, eventSource);
121120
}
122121

123-
@SuppressWarnings("unchecked")
124122
public final synchronized void registerEventSource(String name, EventSource eventSource)
125123
throws OperatorException {
126124
Objects.requireNonNull(eventSource, "EventSource must not be null");

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ public void changeNamespaces(Set<String> namespaces) {
9797
private InformerWrapper<T> createEventSource(
9898
FilterWatchListDeletable<T, KubernetesResourceList<T>, Resource<T>> filteredBySelectorClient,
9999
ResourceEventHandler<T> eventHandler, String key) {
100-
var source = new InformerWrapper<>(filteredBySelectorClient.runnableInformer(0),
101-
configuration);
100+
var source = new InformerWrapper<>(filteredBySelectorClient.runnableInformer(0));
102101
source.addEventHandler(eventHandler);
103102
sources.put(key, source);
104103
return source;

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import io.javaoperatorsdk.operator.OperatorException;
2222
import io.javaoperatorsdk.operator.ReconcilerUtils;
2323
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
24-
import io.javaoperatorsdk.operator.api.config.ResourceConfiguration;
2524
import io.javaoperatorsdk.operator.processing.LifecycleAware;
2625
import io.javaoperatorsdk.operator.processing.event.ResourceID;
2726
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
@@ -33,13 +32,10 @@ class InformerWrapper<T extends HasMetadata>
3332

3433
private final SharedIndexInformer<T> informer;
3534
private final Cache<T> cache;
36-
private final ResourceConfiguration<?> resourceConfiguration;
3735

38-
public InformerWrapper(SharedIndexInformer<T> informer,
39-
ResourceConfiguration<?> resourceConfiguration) {
36+
public InformerWrapper(SharedIndexInformer<T> informer) {
4037
this.informer = informer;
4138
this.cache = (Cache<T>) informer.getStore();
42-
this.resourceConfiguration = resourceConfiguration;
4339
}
4440

4541
@Override
@@ -73,7 +69,7 @@ public void start() throws OperatorException {
7369
// note that in case we don't put here timeout and stopOnInformerErrorDuringStartup is
7470
// false, and there is a rbac issue the get never returns; therefore operator never really
7571
// starts
76-
start.toCompletableFuture().get(resourceConfiguration.cacheSyncTimeout().toMillis(),
72+
start.toCompletableFuture().get(configService.cacheSyncTimeout().toMillis(),
7773
TimeUnit.MILLISECONDS);
7874
} catch (TimeoutException | ExecutionException e) {
7975
if (configService.stopOnInformerErrorDuringStartup()) {

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ControllerManagerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private static class TestControllerConfiguration<R extends HasMetadata>
5858
public TestControllerConfiguration(Reconciler<R> controller, Class<R> crClass) {
5959
super(null, getControllerName(controller),
6060
CustomResource.getCRDName(crClass), null, false, null, null, null, null, crClass,
61-
null, null, null, null, null, null, null);
61+
null, null, null, null, null, null);
6262
this.controller = controller;
6363
}
6464

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,14 @@
2525
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
2626
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
2727
import io.javaoperatorsdk.operator.api.config.MockControllerConfiguration;
28-
import io.javaoperatorsdk.operator.api.reconciler.*;
28+
import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
29+
import io.javaoperatorsdk.operator.api.reconciler.Context;
30+
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
31+
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
32+
import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
33+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
34+
import io.javaoperatorsdk.operator.api.reconciler.RetryInfo;
35+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
2936
import io.javaoperatorsdk.operator.processing.Controller;
3037
import io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.CustomResourceFacade;
3138
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
@@ -99,8 +106,7 @@ private <R extends HasMetadata> ReconciliationDispatcher<R> init(R customResourc
99106
final Class<R> resourceClass = (Class<R>) customResource.getClass();
100107
configuration = configuration == null ? MockControllerConfiguration.forResource(resourceClass)
101108
: configuration;
102-
when(configuration.cacheSyncTimeout())
103-
.thenReturn(Duration.ofMinutes(CacheSyncTimeout.DEFAULT_TIMEOUT));
109+
104110
when(configuration.getFinalizerName()).thenReturn(DEFAULT_FINALIZER);
105111
when(configuration.getName()).thenReturn("EventDispatcherTestController");
106112
when(configuration.getResourceClass()).thenReturn(resourceClass);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public ControllerConfig(String finalizer, boolean generationAware,
145145
eventFilter,
146146
customResourceClass,
147147
null,
148-
null, null, null, null, null, null);
148+
null, null, null, null, null);
149149
}
150150
}
151151

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.javaoperatorsdk.operator.processing.event.source.controller;
22

3-
import java.time.Duration;
43
import java.time.LocalDateTime;
54
import java.util.List;
65

@@ -10,7 +9,6 @@
109
import io.javaoperatorsdk.operator.MockKubernetesClient;
1110
import io.javaoperatorsdk.operator.TestUtils;
1211
import io.javaoperatorsdk.operator.api.config.DefaultControllerConfiguration;
13-
import io.javaoperatorsdk.operator.api.reconciler.CacheSyncTimeout;
1412
import io.javaoperatorsdk.operator.processing.Controller;
1513
import io.javaoperatorsdk.operator.processing.event.EventHandler;
1614
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
@@ -190,9 +188,7 @@ public TestConfiguration(boolean generationAware, OnAddFilter<TestCustomResource
190188
null,
191189
TestCustomResource.class,
192190
null,
193-
onAddFilter, onUpdateFilter, genericFilter, null,
194-
Duration.ofMinutes(CacheSyncTimeout.DEFAULT_TIMEOUT),
195-
null);
191+
onAddFilter, onUpdateFilter, genericFilter, null, null);
196192
}
197193
}
198194
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,15 +205,12 @@ Operator startOperator(boolean stopOnInformerErrorDuringStartup, boolean addStop
205205
Operator operator = new Operator(clientUsingServiceAccount(),
206206
co -> {
207207
co.withStopOnInformerErrorDuringStartup(stopOnInformerErrorDuringStartup);
208+
co.withCacheSyncTimeout(Duration.ofMillis(3000));
208209
if (addStopHandler) {
209-
co.withInformerStoppedHandler((informer, ex) -> {
210-
replacementStopHandlerCalled = true;
211-
});
210+
co.withInformerStoppedHandler((informer, ex) -> replacementStopHandlerCalled = true);
212211
}
213212
});
214-
operator.register(reconciler, co -> {
215-
co.withCacheSyncTimeout(Duration.ofMillis(3000));
216-
});
213+
operator.register(reconciler);
217214
operator.installShutdownHook();
218215
operator.start();
219216
return operator;

0 commit comments

Comments
 (0)