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 ec85b2c6db656a75bd91d6e9210875a94709129d Author: Claus Ibsen <[email protected]> AuthorDate: Tue Nov 23 09:52:38 2021 +0100 CAMEL-17223: camel-main - durationMaxAction to control whether to shutdown or stop all routes. --- .../org/apache/camel/impl/engine/AbstractCamelContext.java | 8 ++++++-- .../src/main/java/org/apache/camel/main/MainSupport.java | 14 +++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index 0eb4402..30dbe16 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -1207,9 +1207,13 @@ public abstract class AbstractCamelContext extends BaseService List<RouteStartupOrder> routesOrdered = new ArrayList<>(getRouteStartupOrder()); routesOrdered.sort(comparator); for (RouteStartupOrder order : routesOrdered) { - stopRoute(order.getRoute().getRouteId()); + Route route = order.getRoute(); + boolean stopped = getRouteController().getRouteStatus(route.getRouteId()).isStopped(); + if (!stopped) { + stopRoute(route.getRouteId()); + } } - // stop remainder routes + // stop any remainder routes for (Route route : getRoutes()) { boolean stopped = getRouteController().getRouteStatus(route.getRouteId()).isStopped(); if (!stopped) { diff --git a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java index 4d40a91..1b925d8 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/MainSupport.java @@ -46,6 +46,7 @@ public abstract class MainSupport extends BaseMainSupport { private int durationMaxMessages; private long durationMaxSeconds; private int durationHitExitCode; + private String durationMaxAction = "shutdown"; protected MainSupport(Class<?>... configurationClasses) { this(); @@ -108,6 +109,7 @@ public abstract class MainSupport extends BaseMainSupport { durationMaxMessages = mainConfigurationProperties.getDurationMaxMessages(); durationMaxSeconds = mainConfigurationProperties.getDurationMaxSeconds(); durationHitExitCode = mainConfigurationProperties.getDurationHitExitCode(); + durationMaxAction = mainConfigurationProperties.getDurationMaxAction(); // register main as bootstrap CamelContext context = getCamelContext(); @@ -304,8 +306,18 @@ public abstract class MainSupport extends BaseMainSupport { LOG.info("Waiting until complete: Duration max {} seconds", sec); boolean zero = shutdownStrategy.await(sec, TimeUnit.SECONDS); if (!zero) { - LOG.info("Duration max seconds triggering shutdown of the JVM"); + if ("stop".equalsIgnoreCase(durationMaxAction)) { + LOG.info("Duration max seconds triggering stopping all routes"); + try { + camelContext.getRouteController().stopAllRoutes(); + } catch (Exception e) { + LOG.warn("Error during stopping all routes. This exception is ignored.", e); + } + // we are just stopping routes (not terminating JVM) so continue + continue; + } } + LOG.info("Duration max seconds triggering shutdown of the JVM"); exitCode.compareAndSet(UNINITIALIZED_EXIT_CODE, exit); shutdownStrategy.shutdown(); } else if (idle > 0 || max > 0) {
