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/16 16:38:28 UTC
(camel) 03/07: 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 rc
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 070e68f937e828babab2779e624a8f1e4607b3f2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Dec 16 13:08:09 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.
---
.../src/main/java/org/apache/camel/spi/RouteController.java | 6 ++++++
.../java/org/apache/camel/spi/SupervisingRouteController.java | 4 ++++
.../java/org/apache/camel/impl/engine/DefaultRouteController.java | 5 +++++
.../camel/impl/engine/DefaultSupervisingRouteController.java | 7 ++++++-
.../org/apache/camel/impl/engine/InternalRouteController.java | 7 +++++++
.../org/apache/camel/impl/console/RouteControllerConsole.java | 4 ++++
.../org/apache/camel/impl/health/RouteControllerHealthCheck.java | 8 ++------
.../dsl/jbang/core/commands/action/RouteControllerAction.java | 3 +++
8 files changed, 37 insertions(+), 7 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 5b7eefcff34..d538eb77d97 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
@@ -99,6 +99,12 @@ public interface RouteController extends CamelContextAware, StaticService {
*/
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.
+ */
+ boolean isUnhealthyRoutes();
+
/**
* Reloads all the routes
*
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java b/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
index 4631919cfbc..a2018986e1b 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/SupervisingRouteController.java
@@ -173,6 +173,10 @@ public interface SupervisingRouteController extends RouteController {
*/
Throwable getRestartException(String routeId);
+ /**
+ * Whether the route controller is currently starting routes for the first time.
+ * This only reports on the first time start phase.
+ */
boolean isStartingRoutes();
}
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 54ee46708f4..fa63220eedb 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
@@ -108,6 +108,11 @@ public class DefaultRouteController extends ServiceSupport implements RouteContr
return getInternalRouteController().isStartingRoutes();
}
+ @Override
+ public boolean isUnhealthyRoutes() {
+ return getInternalRouteController().isUnhealthyRoutes();
+ }
+
@Override
public void reloadAllRoutes() throws Exception {
getInternalRouteController().reloadAllRoutes();
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 44b3b6cc6a0..5df8119b4fc 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 isStartingRoutes() {
+ public boolean isUnhealthyRoutes() {
boolean answer = startingRoutes;
// if we have started the routes first time, but some failed and are scheduled for restart
@@ -264,6 +264,11 @@ public class DefaultSupervisingRouteController extends DefaultRouteController im
return answer;
}
+ @Override
+ public boolean isStartingRoutes() {
+ return startingRoutes;
+ }
+
@Override
public void startRoute(String routeId) throws Exception {
final Optional<RouteHolder> route = routes.stream().filter(r -> r.getId().equals(routeId)).findFirst();
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 4341050bbe8..e07a99760cd 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
@@ -27,6 +27,8 @@ import org.apache.camel.spi.RouteController;
import org.apache.camel.spi.RouteError;
import org.apache.camel.spi.SupervisingRouteController;
+import static org.apache.camel.support.service.ServiceHelper.isStarted;
+
/**
* Internal {@link RouteController} used internally by {@link AbstractCamelContext}.
*/
@@ -111,6 +113,11 @@ class InternalRouteController implements RouteController {
return abstractCamelContext.isStartingRoutes();
}
+ @Override
+ public boolean isUnhealthyRoutes() {
+ return false;
+ }
+
@Override
public ServiceStatus getRouteStatus(String routeId) {
return abstractCamelContext.getRouteStatus(routeId);
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 c43e1fa1960..bb64f241393 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
@@ -66,6 +66,8 @@ public class RouteControllerConsole extends AbstractDevConsole {
long started = routes.stream().filter(r -> src.getRouteStatus(r.getRouteId()).isStarted())
.count();
+ sb.append(String.format("\nInitial Starting Routes: %b", src.isStartingRoutes()));
+ sb.append(String.format("\nUnhealthy Routes: %b", src.isUnhealthyRoutes()));
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()));
@@ -178,6 +180,8 @@ public class RouteControllerConsole extends AbstractDevConsole {
.count();
root.put("controller", "SupervisingRouteController");
+ root.put("startingRoutes", src.isStartingRoutes());
+ root.put("unhealthyRoutes", src.isUnhealthyRoutes());
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 35d37c3bbe1..06b076e44f1 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
@@ -45,12 +45,8 @@ public class RouteControllerHealthCheck extends AbstractHealthCheck {
RouteController rc = getCamelContext().getRouteController();
if (rc != null) {
- // should be down if starting routes as all routes must be complete before ready
- up = ServiceHelper.isStarted(rc);
- if (up) {
- // is starting routes in progress then we should be DOWN
- up = !rc.isStartingRoutes();
- }
+ // should only be up if there are no unhealthy routes
+ up = !rc.isUnhealthyRoutes();
}
if (up) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
index e9f501b6576..8a85c25459a 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/RouteControllerAction.java
@@ -165,6 +165,8 @@ public class RouteControllerAction extends ActionWatchCommand {
if (supervising) {
if (header) {
System.out.println("Supervising Route Controller");
+ System.out.printf("\tInitial Starting Routes: %b%n", jo.getBoolean("startingRoutes"));
+ System.out.printf("\tUnhealthy Routes: %b%n", jo.getBoolean("unhealthyRoutes"));
System.out.printf("\tRoutes Total: %s%n", jo.getInteger("totalRoutes"));
System.out.printf("\tRoutes Started: %d%n", jo.getInteger("startedRoutes"));
System.out.printf("\tRoutes Restarting: %d%n", jo.getInteger("restartingRoutes"));
@@ -183,6 +185,7 @@ public class RouteControllerAction extends ActionWatchCommand {
} else {
if (header) {
System.out.println("Default Route Controller");
+ System.out.printf("\tStarting Routes: %b%n", jo.getBoolean("startingRoutes"));
System.out.printf("\tRoutes Total: %s%n", jo.getInteger("totalRoutes"));
System.out.println("\n");
}