This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7c1ad8528d8555ebd95d9dacea5e26a14432aeaf Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Oct 2 09:46:18 2021 +0200 CAMEL-17033: camel-core - Optimize Event notifiers to no longer check for started state for every events triggered. --- .../org/apache/camel/spi/ManagementStrategy.java | 7 +++ .../impl/engine/DefaultManagementStrategy.java | 13 +++++ .../java/org/apache/camel/support/EventHelper.java | 68 +++++++++------------- 3 files changed, 49 insertions(+), 39 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java index 0676848..edec86d 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementStrategy.java @@ -85,6 +85,13 @@ public interface ManagementStrategy extends StaticService { List<EventNotifier> getEventNotifiers(); /** + * Gets all the started event notifiers, which is ready to be used. + * + * @return started event notifiers + */ + List<EventNotifier> getStartedEventNotifiers(); + + /** * Adds the event notifier to use. * <p/> * Ensure the event notifier has been started if its a {@link Service}, as otherwise it would not be used. diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultManagementStrategy.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultManagementStrategy.java index 84c4d44..9740118 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultManagementStrategy.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultManagementStrategy.java @@ -50,6 +50,7 @@ import org.apache.camel.util.ObjectHelper; public class DefaultManagementStrategy extends ServiceSupport implements ManagementStrategy, CamelContextAware { private final List<EventNotifier> eventNotifiers = new CopyOnWriteArrayList<>(); + private final List<EventNotifier> startedEventNotifiers = new CopyOnWriteArrayList<>(); private EventFactory eventFactory = new DefaultEventFactory(); private ManagementObjectNameStrategy managementObjectNameStrategy; private ManagementObjectStrategy managementObjectStrategy; @@ -74,8 +75,17 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem } @Override + public List<EventNotifier> getStartedEventNotifiers() { + return startedEventNotifiers; + } + + @Override public void addEventNotifier(EventNotifier eventNotifier) { this.eventNotifiers.add(eventNotifier); + if (isStarted()) { + // already started + this.startedEventNotifiers.add(eventNotifier); + } if (getCamelContext() != null) { // okay we have an event notifier that accepts exchange events so its applicable if (!eventNotifier.isIgnoreExchangeEvents()) { @@ -86,6 +96,7 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem @Override public boolean removeEventNotifier(EventNotifier eventNotifier) { + startedEventNotifiers.remove(eventNotifier); return eventNotifiers.remove(eventNotifier); } @@ -205,10 +216,12 @@ public class DefaultManagementStrategy extends ServiceSupport implements Managem @Override protected void doStart() throws Exception { ServiceHelper.startService(eventNotifiers, managementAgent, managementObjectStrategy, managementObjectNameStrategy); + startedEventNotifiers.addAll(eventNotifiers); } @Override protected void doStop() throws Exception { + startedEventNotifiers.clear(); ServiceHelper.stopService(managementObjectNameStrategy, managementObjectStrategy, managementAgent, eventNotifiers); } diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java index cdb21bb..09b5b6a 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java @@ -25,7 +25,6 @@ import org.apache.camel.Exchange; import org.apache.camel.ExtendedExchange; import org.apache.camel.Processor; import org.apache.camel.Route; -import org.apache.camel.StatefulService; import org.apache.camel.spi.CamelEvent; import org.apache.camel.spi.EventFactory; import org.apache.camel.spi.EventNotifier; @@ -118,7 +117,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -157,7 +156,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -196,7 +195,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -235,7 +234,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -274,7 +273,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -313,7 +312,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -352,7 +351,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -391,7 +390,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -430,7 +429,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -469,7 +468,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -515,7 +514,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -561,7 +560,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -609,7 +608,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -657,7 +656,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -703,7 +702,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -749,7 +748,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -795,7 +794,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -841,7 +840,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -880,7 +879,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -919,7 +918,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -958,7 +957,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -997,7 +996,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1036,7 +1035,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1075,7 +1074,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1114,7 +1113,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1153,7 +1152,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1192,7 +1191,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1231,7 +1230,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1270,7 +1269,7 @@ public final class EventHelper { return false; } - List<EventNotifier> notifiers = management.getEventNotifiers(); + List<EventNotifier> notifiers = management.getStartedEventNotifiers(); if (notifiers == null || notifiers.isEmpty()) { return false; } @@ -1299,15 +1298,6 @@ public final class EventHelper { } private static boolean doNotifyEvent(EventNotifier notifier, CamelEvent event) { - if (notifier instanceof StatefulService) { - // only notify if notifier is started (when stateful service) - boolean started = ((StatefulService) notifier).isStarted(); - if (!started) { - LOG.debug("Ignoring notifying event {}. The EventNotifier has not been started yet: {}", event, notifier); - return false; - } - } - if (!notifier.isEnabled(event)) { LOG.trace("Notifier: {} is not enabled for the event: {}", notifier, event); return false;