diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java index a0b7938302..bfbe17c7c8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java @@ -113,14 +113,24 @@ public void changeNamespaces(Set namespaces) { log.debug("Stopped informer {} for namespaces: {}", this, sourcesToRemove); sourcesToRemove.forEach(k -> sources.remove(k).stop()); - namespaces.forEach( - ns -> { - if (!sources.containsKey(ns)) { - final InformerWrapper source = createEventSourceForNamespace(ns); - source.start(); - log.debug("Registered new {} -> {} for namespace: {}", this, source, ns); - } - }); + var newNamespaces = + namespaces.stream().filter(ns -> !sources.containsKey(ns)).collect(Collectors.toList()); + if (newNamespaces.isEmpty()) { + return; + } + + controllerConfiguration + .getConfigurationService() + .getExecutorServiceManager() + .boundedExecuteAndWaitForAllToComplete( + newNamespaces.stream(), + ns -> { + final var source = createEventSourceForNamespace(ns); + source.start(); + log.debug("Registered new {} -> {} for namespace: {}", this, source, ns); + return null; + }, + ns -> "InformerStarter-" + ns + "-" + configuration.getResourceClass().getSimpleName()); } private InformerWrapper createEventSourceForNamespace(String namespace) {