This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new fadfaef Fixed so camel marks starting routes more eager as recent refactorings with reifiers may create endpoints sooner. fadfaef is described below commit fadfaef7a2d1c30f4d1733c6e136827d2763bbac Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sun Mar 15 18:01:13 2020 +0100 Fixed so camel marks starting routes more eager as recent refactorings with reifiers may create endpoints sooner. --- .../camel/impl/engine/AbstractDynamicRegistry.java | 11 ++++-- .../org/apache/camel/impl/DefaultCamelContext.java | 44 +++++++++++++--------- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java index 36b0b90..a62ab9b 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractDynamicRegistry.java @@ -27,6 +27,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.camel.CamelContext; import org.apache.camel.ExtendedCamelContext; import org.apache.camel.StaticService; +import org.apache.camel.spi.RouteController; import org.apache.camel.support.LRUCache; import org.apache.camel.support.LRUCacheFactory; import org.apache.camel.support.service.ServiceHelper; @@ -37,13 +38,15 @@ import org.apache.camel.support.service.ServiceHelper; */ public class AbstractDynamicRegistry<K, V> extends AbstractMap<K, V> implements StaticService { - protected final CamelContext context; + protected final ExtendedCamelContext context; + protected final RouteController routeController; protected final int maxCacheSize; protected final Map<K, V> dynamicMap; protected final Map<K, V> staticMap; public AbstractDynamicRegistry(CamelContext context, int maxCacheSize) { - this.context = context; + this.context = (ExtendedCamelContext) context; + this.routeController = context.getRouteController(); this.maxCacheSize = maxCacheSize; // do not stop on eviction, as the transformer may still be in use this.dynamicMap = LRUCacheFactory.newLRUCache(this.maxCacheSize, this.maxCacheSize, false); @@ -64,7 +67,7 @@ public class AbstractDynamicRegistry<K, V> extends AbstractMap<K, V> implements V answer = staticMap.get(o); if (answer == null) { answer = dynamicMap.get(o); - if (answer != null && (context.adapt(ExtendedCamelContext.class).isSetupRoutes() || context.getRouteController().isStartingRoutes())) { + if (answer != null && (context.isSetupRoutes() || routeController.isStartingRoutes())) { dynamicMap.remove(o); staticMap.put((K) o, answer); } @@ -90,7 +93,7 @@ public class AbstractDynamicRegistry<K, V> extends AbstractMap<K, V> implements } // we want transformers to be static if they are part of setting up or starting routes - if (context.adapt(ExtendedCamelContext.class).isSetupRoutes() || context.getRouteController().isStartingRoutes()) { + if (context.isSetupRoutes() || routeController.isStartingRoutes()) { answer = staticMap.put(key, transformer); } else { answer = dynamicMap.put(key, transformer); diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index 17b9531..ba3fe6b 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -329,25 +329,35 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame } public void startRouteDefinitions(List<RouteDefinition> routeDefinitions) throws Exception { - RouteDefinitionHelper.forceAssignIds(getCamelContextReference(), routeDefinitions); - for (RouteDefinition routeDefinition : routeDefinitions) { - // assign ids to the routes and validate that the id's is all unique - String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions); - if (duplicate != null) { - throw new FailedToStartRouteException(routeDefinition.getId(), "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes."); - } + // indicate we are staring the route using this thread so + // we are able to query this if needed + boolean alreadyStartingRoutes = isStartingRoutes(); + if (!alreadyStartingRoutes) { + setStartingRoutes(true); + } + try { + RouteDefinitionHelper.forceAssignIds(getCamelContextReference(), routeDefinitions); + for (RouteDefinition routeDefinition : routeDefinitions) { + // assign ids to the routes and validate that the id's is all unique + String duplicate = RouteDefinitionHelper.validateUniqueIds(routeDefinition, routeDefinitions); + if (duplicate != null) { + throw new FailedToStartRouteException(routeDefinition.getId(), "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes."); + } - // must ensure route is prepared, before we can start it - if (!routeDefinition.isPrepared()) { - RouteDefinitionHelper.prepareRoute(getCamelContextReference(), routeDefinition); - routeDefinition.markPrepared(); - } + // must ensure route is prepared, before we can start it + if (!routeDefinition.isPrepared()) { + RouteDefinitionHelper.prepareRoute(getCamelContextReference(), routeDefinition); + routeDefinition.markPrepared(); + } - // indicate we are staring the route using this thread so - // we are able to query this if needed - Route route = new RouteReifier(getCamelContextReference(), routeDefinition).createRoute(); - RouteService routeService = new RouteService(route); - startRouteService(routeService, true); + Route route = new RouteReifier(getCamelContextReference(), routeDefinition).createRoute(); + RouteService routeService = new RouteService(route); + startRouteService(routeService, true); + } + } finally { + if (!alreadyStartingRoutes) { + setStartingRoutes(false); + } } }