You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/11/23 09:24:05 UTC

[camel] 05/08: CAMEL-17223: camel-main - durationMaxAction to control whether to shutdown or stop all routes.

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 2477c66b7bcd124f24d009a2c0df28b388025d39
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Nov 22 16:18:09 2021 +0100

    CAMEL-17223: camel-main - durationMaxAction to control whether to shutdown or stop all routes.
---
 .../camel/impl/engine/AbstractCamelContext.java       | 19 ++++++++++++++++---
 .../java/org/apache/camel/main/KameletMainTest.java   |  3 ++-
 2 files changed, 18 insertions(+), 4 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 bc5b795..0eb4402 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
@@ -1199,9 +1199,22 @@ public abstract class AbstractCamelContext extends BaseService
     }
 
     public void stopAllRoutes() throws Exception {
-        // stop all routes
-        if (shutdownStrategy != null) {
-            shutdownStrategy.shutdown(this, getRouteStartupOrder());
+        // stop all routes in reverse order that they were started
+        Comparator<RouteStartupOrder> comparator = Comparator.comparingInt(RouteStartupOrder::getStartupOrder);
+        if (shutdownStrategy == null || shutdownStrategy.isShutdownRoutesInReverseOrder()) {
+            comparator = comparator.reversed();
+        }
+        List<RouteStartupOrder> routesOrdered = new ArrayList<>(getRouteStartupOrder());
+        routesOrdered.sort(comparator);
+        for (RouteStartupOrder order : routesOrdered) {
+            stopRoute(order.getRoute().getRouteId());
+        }
+        // stop remainder routes
+        for (Route route : getRoutes()) {
+            boolean stopped = getRouteController().getRouteStatus(route.getRouteId()).isStopped();
+            if (!stopped) {
+                stopRoute(route.getRouteId());
+            }
         }
     }
 
diff --git a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/KameletMainTest.java b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/KameletMainTest.java
index 82083f8..2442d1d 100644
--- a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/KameletMainTest.java
+++ b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/KameletMainTest.java
@@ -36,7 +36,8 @@ public class KameletMainTest {
     public void testReload() throws Exception {
         KameletMain main = new KameletMain();
         main.setDownload(true);
-        main.configure().withDurationMaxSeconds(60);
+        main.configure().withDurationMaxMessages(10);
+        main.configure().withDurationMaxAction("stop");
         main.configure().withRoutesIncludePattern("file:src/test/resources/my-route.yaml");
         main.configure().withRoutesReloadEnabled(true);
         main.configure().withRoutesReloadDirectory("src/test/resources");