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);
                             }
                         }

Reply via email to