Skip to content

Commit 8de41a5

Browse files
committed
fix: Operator should only set ConfigurationService, not hold onto it
1 parent 324d0df commit 8de41a5

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
public class Operator implements LifecycleAware {
2828
private static final Logger log = LoggerFactory.getLogger(Operator.class);
2929
private final KubernetesClient kubernetesClient;
30-
private final ConfigurationService configurationService;
3130
private final ControllerManager controllers = new ControllerManager();
3231

3332
public Operator() {
@@ -64,7 +63,6 @@ public Operator(KubernetesClient client, Consumer<ConfigurationServiceOverrider>
6463
*/
6564
public Operator(KubernetesClient kubernetesClient, ConfigurationService configurationService) {
6665
this.kubernetesClient = kubernetesClient;
67-
this.configurationService = configurationService;
6866
ConfigurationServiceProvider.set(configurationService);
6967
}
7068

@@ -89,7 +87,7 @@ public List<Controller> getControllers() {
8987
public void start() {
9088
controllers.shouldStart();
9189

92-
final var version = configurationService.getVersion();
90+
final var version = ConfigurationServiceProvider.instance().getVersion();
9391
log.info(
9492
"Operator SDK {} (commit: {}) built on {} starting...",
9593
version.getSdkVersion(),
@@ -105,6 +103,7 @@ public void start() {
105103

106104
@Override
107105
public void stop() throws OperatorException {
106+
final var configurationService = ConfigurationServiceProvider.instance();
108107
log.info(
109108
"Operator SDK {} is shutting down...", configurationService.getVersion().getSdkVersion());
110109

@@ -126,7 +125,8 @@ public void stop() throws OperatorException {
126125
*/
127126
public <R extends HasMetadata> void register(Reconciler<R> reconciler)
128127
throws OperatorException {
129-
final var controllerConfiguration = configurationService.getConfigurationFor(reconciler);
128+
final var controllerConfiguration =
129+
ConfigurationServiceProvider.instance().getConfigurationFor(reconciler);
130130
register(reconciler, controllerConfiguration);
131131
}
132132

@@ -151,7 +151,8 @@ public <R extends HasMetadata> void register(Reconciler<R> reconciler,
151151
"Cannot register reconciler with name " + reconciler.getClass().getCanonicalName() +
152152
" reconciler named " + ReconcilerUtils.getNameFor(reconciler)
153153
+ " because its configuration cannot be found.\n" +
154-
" Known reconcilers are: " + configurationService.getKnownReconcilerNames());
154+
" Known reconcilers are: "
155+
+ ConfigurationServiceProvider.instance().getKnownReconcilerNames());
155156
}
156157

157158
final var controller = new Controller<>(reconciler, configuration, kubernetesClient);
@@ -177,7 +178,8 @@ public <R extends HasMetadata> void register(Reconciler<R> reconciler,
177178
*/
178179
public <R extends HasMetadata> void register(Reconciler<R> reconciler,
179180
Consumer<ControllerConfigurationOverrider<R>> configOverrider) {
180-
final var controllerConfiguration = configurationService.getConfigurationFor(reconciler);
181+
final var controllerConfiguration =
182+
ConfigurationServiceProvider.instance().getConfigurationFor(reconciler);
181183
var configToOverride = ControllerConfigurationOverrider.override(controllerConfiguration);
182184
configOverrider.accept(configToOverride);
183185
register(reconciler, configToOverride.build());

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

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

3+
import org.junit.jupiter.api.AfterAll;
34
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.api.BeforeAll;
46
import org.junit.jupiter.api.DisplayName;
57
import org.junit.jupiter.api.Test;
68

79
import io.fabric8.kubernetes.api.model.ConfigMap;
810
import io.fabric8.kubernetes.client.KubernetesClient;
11+
import io.javaoperatorsdk.operator.api.config.AbstractConfigurationService;
12+
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
913
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
1014
import io.javaoperatorsdk.operator.api.reconciler.Context;
1115
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
@@ -23,6 +27,12 @@ class OperatorTest {
2327
private final Operator operator = new Operator(kubernetesClient);
2428
private final FooReconciler fooReconciler = new FooReconciler();
2529

30+
@BeforeAll
31+
@AfterAll
32+
static void setUpConfigurationServiceProvider() {
33+
ConfigurationServiceProvider.reset();
34+
}
35+
2636
@Test
2737
@DisplayName("should register `Reconciler` to Controller")
2838
@SuppressWarnings("unchecked")
@@ -41,6 +51,10 @@ public void shouldRegisterReconcilerToController() {
4151
@Test
4252
@DisplayName("should throw `OperationException` when Configuration is null")
4353
public void shouldThrowOperatorExceptionWhenConfigurationIsNull() {
54+
// use a ConfigurationService that doesn't automatically create configurations
55+
ConfigurationServiceProvider.reset();
56+
ConfigurationServiceProvider.set(new AbstractConfigurationService(null));
57+
4458
Assertions.assertThrows(OperatorException.class, () -> operator.register(fooReconciler));
4559
}
4660

0 commit comments

Comments
 (0)