diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java index 9cc7022e68..50f2af8641 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java @@ -1,9 +1,6 @@ package io.javaoperatorsdk.operator.processing.event; -import java.util.Collections; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.concurrent.locks.ReentrantLock; import org.slf4j.Logger; @@ -25,7 +22,10 @@ public class EventSourceManager private static final Logger log = LoggerFactory.getLogger(EventSourceManager.class); private final ReentrantLock lock = new ReentrantLock(); - private final Set eventSources = Collections.synchronizedSet(new HashSet<>()); + // This needs to be a list since the event source must be started in a deterministic order. The + // controllerResourceEventSource must be always the first to have informers available for other + // informers to access the main controller cache. + private final List eventSources = Collections.synchronizedList(new ArrayList<>()); private final EventProcessor eventProcessor; private TimerEventSource retryAndRescheduleTimerEventSource; private ControllerResourceEventSource controllerResourceEventSource; @@ -120,7 +120,7 @@ public void cleanupForCustomResource(ResourceID customResourceUid) { @Override public Set getRegisteredEventSources() { - return Collections.unmodifiableSet(eventSources); + return new HashSet<>(eventSources); } @Override