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 <claus.ib...@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();