diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java index 7ee63d760f..f0aea0e1e2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java @@ -2,6 +2,7 @@ import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -54,6 +55,8 @@ public class Controller

implements Reconciler

, Cleaner private final boolean contextInitializer; private final boolean hasDeleterDependents; private final boolean isCleaner; + private final Metrics metrics; + public Controller(Reconciler

reconciler, ControllerConfiguration

configuration, @@ -61,6 +64,8 @@ public Controller(Reconciler

reconciler, this.reconciler = reconciler; this.configuration = configuration; this.kubernetesClient = kubernetesClient; + this.metrics = Optional.ofNullable(ConfigurationServiceProvider.instance().getMetrics()) + .orElse(Metrics.NOOP); contextInitializer = reconciler instanceof ContextInitializer; eventSourceManager = new EventSourceManager<>(this); @@ -105,9 +110,8 @@ private void initContextIfNeeded(P resource, Context

context) { @Override public DeleteControl cleanup(P resource, Context

context) { - initContextIfNeeded(resource, context); try { - return metrics() + return metrics .timeControllerExecution( new ControllerExecution<>() { @Override @@ -127,6 +131,7 @@ public String successTypeName(DeleteControl deleteControl) { @Override public DeleteControl execute() { + initContextIfNeeded(resource, context); if (hasDeleterDependents) { dependents.stream() .filter(d -> d instanceof Deleter) @@ -147,8 +152,7 @@ public DeleteControl execute() { @Override public UpdateControl

reconcile(P resource, Context

context) throws Exception { - initContextIfNeeded(resource, context); - return metrics().timeControllerExecution( + return metrics.timeControllerExecution( new ControllerExecution<>() { @Override public String name() { @@ -174,18 +178,13 @@ public String successTypeName(UpdateControl

result) { @Override public UpdateControl

execute() throws Exception { + initContextIfNeeded(resource, context); dependents.forEach(dependent -> dependent.reconcile(resource, context)); return reconciler.reconcile(resource, context); } }); } - - private Metrics metrics() { - final var metrics = ConfigurationServiceProvider.instance().getMetrics(); - return metrics != null ? metrics : Metrics.NOOP; - } - @Override public List prepareEventSources(EventSourceContext

context) { List sources = new LinkedList<>();