This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.4.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.4.x by this push:
new 5caf7fef9f3 CAMEL-20819: camel-jbang - Reload mode with supervising
route controller does not reload routes
5caf7fef9f3 is described below
commit 5caf7fef9f30a1234c45c3f13fbec495d4d775b5
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri May 31 10:33:20 2024 +0200
CAMEL-20819: camel-jbang - Reload mode with supervising route controller
does not reload routes
---
.../org/apache/camel/spi/SupervisingRouteController.java | 14 ++++++++++++++
.../impl/engine/DefaultSupervisingRouteController.java | 15 ++++++++++++++-
.../main/java/org/apache/camel/builder/RouteBuilder.java | 8 ++++++++
.../mbean/ManagedSupervisingRouteControllerMBean.java | 3 +++
.../mbean/ManagedSupervisingRouteController.java | 5 +++++
.../camel/support/FileWatcherResourceReloadStrategy.java | 2 +-
6 files changed, 45 insertions(+), 2 deletions(-)
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 f80e8248bda..649cadaeb62 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
@@ -179,4 +179,18 @@ public interface SupervisingRouteController extends
RouteController {
*/
boolean isStartingRoutes();
+ /**
+ * Started routes
+ */
+ default void startRoutes() {
+ startRoutes(false);
+ }
+
+ /**
+ * Started routes
+ *
+ * @param reloaded whether the routes to be started is part of reloading
routes
+ */
+ void startRoutes(boolean reloaded);
+
}
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 9eaaa2b0766..a0e3b64d7c6 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
@@ -76,6 +76,7 @@ public class DefaultSupervisingRouteController extends
DefaultRouteController im
private final RouteManager routeManager;
private volatile CamelContextStartupListener listener;
private volatile boolean startingRoutes = true; // state during starting
routes on bootstrap
+ private volatile boolean reloadingRoutes;
private volatile BackOffTimer timer;
private volatile ScheduledExecutorService executorService;
private volatile BackOff backOff;
@@ -100,6 +101,17 @@ public class DefaultSupervisingRouteController extends
DefaultRouteController im
this.routeManager = new RouteManager();
}
+ @Override
+ public void startRoutes(boolean reloaded) {
+ reloadingRoutes = reloaded;
+ try {
+ startNonSupervisedRoutes();
+ startSupervisedRoutes();
+ } finally {
+ reloadingRoutes = false;
+ }
+ }
+
// *********************************
// Properties
// *********************************
@@ -520,7 +532,8 @@ public class DefaultSupervisingRouteController extends
DefaultRouteController im
}
}
- if (getCamelContext().getStartupSummaryLevel() !=
StartupSummaryLevel.Off
+ // reloading routes has its own summary
+ if (!reloadingRoutes && getCamelContext().getStartupSummaryLevel() !=
StartupSummaryLevel.Off
&& getCamelContext().getStartupSummaryLevel() !=
StartupSummaryLevel.Oneline) {
// log after first round of attempts (some routes may be scheduled
for restart)
logRouteStartupSummary();
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
index 6c3d491ae99..c0e3909fc26 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -56,6 +56,7 @@ import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.ResourceAware;
import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.SupervisingRouteController;
import org.apache.camel.support.LifecycleStrategySupport;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -701,6 +702,13 @@ public abstract class RouteBuilder extends BuilderSupport
implements RoutesBuild
// trigger update of the routes
populateOrUpdateRoutes();
+ // trigger reloaded routes to be started if under supervising
controller
+ // as this requires to be done manually via the controller
+ // the default route controller will auto-start routes when added to
camel
+ if (getContext().getRouteController() instanceof
SupervisingRouteController src) {
+ src.startRoutes(true);
+ }
+
if (this instanceof OnCamelContextEvent) {
context.addLifecycleStrategy(LifecycleStrategySupport.adapt((OnCamelContextEvent)
this));
}
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 b051f3a54a9..0baa658815a 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
@@ -79,4 +79,7 @@ public interface ManagedSupervisingRouteControllerMBean
extends ManagedRouteCont
@ManagedOperation(description = "Lists detailed status about all the
routes (incl failure details for routes failed to start)")
TabularData routeStatus(boolean exhausted, boolean restarting, boolean
includeStacktrace);
+ @ManagedOperation(description = "Starts all routes")
+ void startRoutes();
+
}
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 0b50a47abda..504b498d764 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
@@ -247,4 +247,9 @@ public class ManagedSupervisingRouteController extends
ManagedService implements
throw RuntimeCamelException.wrapRuntimeCamelException(e);
}
}
+
+ @Override
+ public void startRoutes() {
+ controller.startRoutes();
+ }
}
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
index 35ffa8dfd84..554c02b92d2 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
@@ -312,7 +312,7 @@ public class FileWatcherResourceReloadStrategy extends
ResourceReloadStrategySup
incSucceededCounter();
} catch (Exception e) {
incFailedCounter();
- LOG.warn("Error reloading routes from file: {}
due to {}. This exception is ignored.", name,
+ LOG.warn("Error reloading routes from file: {}
due to: {}. This exception is ignored.", name,
e.getMessage(), e);
}
}