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 2023/12/17 08:56:22 UTC

(camel) 01/02: CAMEL-20242: camel-core: RouteController health check to be DOWN during starting routes. Supervising route controller option to be DOWN during restarting phase.

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 fee9bacff67d4194bde56988259a101160aeffd4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Dec 17 09:56:00 2023 +0100

    CAMEL-20242: camel-core: RouteController health check to be DOWN during starting routes. Supervising route controller option to be DOWN during restarting phase.
---
 .../java/org/apache/camel/spi/RouteController.java   | 14 +++++---------
 .../camel/impl/engine/DefaultRouteController.java    |  4 ++--
 .../engine/DefaultSupervisingRouteController.java    |  2 +-
 .../camel/impl/engine/InternalRouteController.java   |  2 +-
 .../camel/impl/console/RouteControllerConsole.java   |  4 ++--
 .../impl/health/RouteControllerHealthCheck.java      |  2 +-
 .../mbean/ManagedRouteControllerMBean.java           |  6 ++++++
 .../ManagedSupervisingRouteControllerMBean.java      |  6 ++++++
 .../management/mbean/ManagedRouteController.java     | 10 ++++++++++
 .../mbean/ManagedSupervisingRouteController.java     | 20 ++++++++++++++++++++
 10 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
index 7aace75c0f6..d480beac546 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteController.java
@@ -91,20 +91,16 @@ public interface RouteController extends CamelContextAware, StaticService {
     void removeAllRoutes() throws Exception;
 
     /**
-     * Indicates whether current thread is starting route(s).
-     * <p/>
-     * This can be useful to know by {@link LifecycleStrategy} or the likes, in case they need to react differently.
-     *
-     * @return <tt>true</tt> if current thread is starting route(s), or <tt>false</tt> if not.
+     * Indicates whether the route controller is doing initial starting of the routes.
      */
     boolean isStartingRoutes();
 
     /**
-     * Indicates if the route controller has routes that are unhealthy such as they have not yet been successfully
-     * started, and if being supervised then the route can either be pending restarts or failed all restart attempts and
-     * are exhausted.
+     * Indicates if the route controller has routes that are currently unhealthy such as they have not yet been
+     * successfully started, and if being supervised then the route can either be pending restarts or failed all restart
+     * attempts and are exhausted.
      */
-    boolean isUnhealthyRoutes();
+    boolean hasUnhealthyRoutes();
 
     /**
      * Reloads all the routes
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
index fa63220eedb..4376d8332fd 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRouteController.java
@@ -109,8 +109,8 @@ public class DefaultRouteController extends ServiceSupport implements RouteContr
     }
 
     @Override
-    public boolean isUnhealthyRoutes() {
-        return getInternalRouteController().isUnhealthyRoutes();
+    public boolean hasUnhealthyRoutes() {
+        return getInternalRouteController().hasUnhealthyRoutes();
     }
 
     @Override
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultSupervisingRouteController.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultSupervisingRouteController.java
index 5df8119b4fc..9eaaa2b0766 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultSupervisingRouteController.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultSupervisingRouteController.java
@@ -248,7 +248,7 @@ public class DefaultSupervisingRouteController extends DefaultRouteController im
     // *********************************
 
     @Override
-    public boolean isUnhealthyRoutes() {
+    public boolean hasUnhealthyRoutes() {
         boolean answer = startingRoutes;
 
         // if we have started the routes first time, but some failed and are scheduled for restart
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteController.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteController.java
index a3e49591e8e..1bc43d8e90c 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteController.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/InternalRouteController.java
@@ -112,7 +112,7 @@ class InternalRouteController implements RouteController {
     }
 
     @Override
-    public boolean isUnhealthyRoutes() {
+    public boolean hasUnhealthyRoutes() {
         return false;
     }
 
diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
index bb64f241393..f727cdd5e38 100644
--- a/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
+++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/RouteControllerConsole.java
@@ -67,7 +67,7 @@ public class RouteControllerConsole extends AbstractDevConsole {
                     .count();
 
             sb.append(String.format("\nInitial Starting Routes: %b", src.isStartingRoutes()));
-            sb.append(String.format("\nUnhealthy Routes: %b", src.isUnhealthyRoutes()));
+            sb.append(String.format("\nUnhealthy Routes: %b", src.hasUnhealthyRoutes()));
             sb.append(String.format("Total Routes: %d", routes.size()));
             sb.append(String.format("\nStarted Routes: %d", started));
             sb.append(String.format("\nRestarting Routes: %d", src.getRestartingRoutes().size()));
@@ -181,7 +181,7 @@ public class RouteControllerConsole extends AbstractDevConsole {
 
             root.put("controller", "SupervisingRouteController");
             root.put("startingRoutes", src.isStartingRoutes());
-            root.put("unhealthyRoutes", src.isUnhealthyRoutes());
+            root.put("unhealthyRoutes", src.hasUnhealthyRoutes());
             root.put("totalRoutes", routes.size());
             root.put("startedRoutes", started);
             root.put("restartingRoutes", src.getRestartingRoutes().size());
diff --git a/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteControllerHealthCheck.java b/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteControllerHealthCheck.java
index 5f23eb6e6a1..b483188295b 100644
--- a/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteControllerHealthCheck.java
+++ b/core/camel-health/src/main/java/org/apache/camel/impl/health/RouteControllerHealthCheck.java
@@ -52,7 +52,7 @@ public class RouteControllerHealthCheck extends AbstractHealthCheck {
         RouteController rc = getCamelContext().getRouteController();
         if (rc != null) {
             // should only be up if there are no unhealthy routes
-            up = !rc.isUnhealthyRoutes();
+            up = !rc.hasUnhealthyRoutes();
             // do we have any details about why we are not up
             if (!up && rc instanceof SupervisingRouteController src) {
                 Set<Route> routes = new TreeSet<>(Comparator.comparing(Route::getId));
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteControllerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteControllerMBean.java
index 00246d32edb..a4ef7ded867 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteControllerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteControllerMBean.java
@@ -22,6 +22,12 @@ import org.apache.camel.api.management.ManagedAttribute;
 
 public interface ManagedRouteControllerMBean extends ManagedServiceMBean {
 
+    @ManagedAttribute(description = "Indicates whether the route controller is doing initial starting of the routes.")
+    boolean isStartingRoutes();
+
+    @ManagedAttribute(description = "Indicates if the route controller has routes that are currently unhealthy")
+    boolean isHasUnhealthyRoutes();
+
     @ManagedAttribute(description = "Controlled Routes")
     Collection<String> getControlledRoutes();
 
diff --git a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedSupervisingRouteControllerMBean.java b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedSupervisingRouteControllerMBean.java
index f1131f9ac1b..b051f3a54a9 100644
--- a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedSupervisingRouteControllerMBean.java
+++ b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedSupervisingRouteControllerMBean.java
@@ -55,6 +55,12 @@ public interface ManagedSupervisingRouteControllerMBean extends ManagedRouteCont
     @ManagedAttribute(description = "Pattern for filtering routes to be excluded as supervised")
     String getExcludeRoutes();
 
+    @ManagedAttribute(description = "Whether to mark the route as unhealthy (down) when all restarting attempts (backoff) have failed and the route is not successfully started and the route manager is giving up.")
+    boolean isUnhealthyOnExhausted();
+
+    @ManagedAttribute(description = "Whether to mark the route as unhealthy (down) when the route failed to initially start, and is being controlled for restarting (backoff)")
+    boolean isUnhealthyOnRestarting();
+
     @ManagedAttribute(description = "Number of routes controlled by the controller")
     int getNumberOfControlledRoutes();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRouteController.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRouteController.java
index 0208cbe6a64..83d83ce291e 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRouteController.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRouteController.java
@@ -39,6 +39,16 @@ public class ManagedRouteController extends ManagedService implements ManagedRou
         return controller;
     }
 
+    @Override
+    public boolean isStartingRoutes() {
+        return controller.isStartingRoutes();
+    }
+
+    @Override
+    public boolean isHasUnhealthyRoutes() {
+        return controller.hasUnhealthyRoutes();
+    }
+
     @Override
     public Collection<String> getControlledRoutes() {
         if (controller != null) {
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
index 3779f79d55f..0b50a47abda 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedSupervisingRouteController.java
@@ -104,6 +104,26 @@ public class ManagedSupervisingRouteController extends ManagedService implements
         return controller.getExcludeRoutes();
     }
 
+    @Override
+    public boolean isUnhealthyOnExhausted() {
+        return controller.isUnhealthyOnExhausted();
+    }
+
+    @Override
+    public boolean isUnhealthyOnRestarting() {
+        return controller.isUnhealthyOnRestarting();
+    }
+
+    @Override
+    public boolean isStartingRoutes() {
+        return controller.isStartingRoutes();
+    }
+
+    @Override
+    public boolean isHasUnhealthyRoutes() {
+        return controller.hasUnhealthyRoutes();
+    }
+
     @Override
     public int getNumberOfControlledRoutes() {
         return controller.getControlledRoutes().size();