From 1517c3e54442d9e43f6727e60ff43e67e3fc689e Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 6 Dec 2021 16:59:06 +0100 Subject: [PATCH 1/2] fix: issue with event source start ordering --- .../processing/event/EventSourceManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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..5266c62be8 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 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 From 0a08c03883c3c840338f37f6d369a1c679c6351e Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 6 Dec 2021 17:03:06 +0100 Subject: [PATCH 2/2] fix: docs --- .../operator/processing/event/EventSourceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5266c62be8..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 @@ -24,7 +24,7 @@ public class EventSourceManager private final ReentrantLock lock = new ReentrantLock(); // 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 cache + // informers to access the main controller cache. private final List eventSources = Collections.synchronizedList(new ArrayList<>()); private final EventProcessor eventProcessor; private TimerEventSource retryAndRescheduleTimerEventSource;