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 2021/12/08 13:59:34 UTC

[camel] 03/04: CAMEL-17302: camel-core - Route reload event to indicate index/total

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 356ed29929ee02003ebb99fde5dc2200acaa9051
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Dec 8 14:54:40 2021 +0100

    CAMEL-17302: camel-core - Route reload event to indicate index/total
---
 .../src/main/java/org/apache/camel/spi/CamelEvent.java  | 10 ++++++++++
 .../main/java/org/apache/camel/spi/EventFactory.java    |  4 +++-
 .../apache/camel/impl/event/DefaultEventFactory.java    |  4 ++--
 .../org/apache/camel/impl/event/RouteReloadedEvent.java | 17 ++++++++++++++++-
 .../main/java/org/apache/camel/support/EventHelper.java |  4 ++--
 .../camel/support/RouteWatcherReloadStrategy.java       |  4 +++-
 6 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
index 6a34fa8..68ec435 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CamelEvent.java
@@ -353,6 +353,16 @@ public interface CamelEvent {
         default Type getType() {
             return Type.RouteReloaded;
         }
+
+        /**
+         * The route index in this batch (starts from 1)
+         */
+        int getIndex();
+
+        /**
+         * Total number of routes being reloaded in this batch
+         */
+        int getTotal();
     }
 
     interface RouteStartingEvent extends RouteEvent {
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
index fa402e9..a92bcd7 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/EventFactory.java
@@ -199,9 +199,11 @@ public interface EventFactory {
      * Creates an {@link CamelEvent} for {@link Route} has been reloaded successfully.
      *
      * @param  route the route
+     * @param  index the route index in this batch
+     * @param  total total number of routes being reloaded in this batch
      * @return       the reloaded event
      */
-    CamelEvent createRouteReloaded(Route route);
+    CamelEvent createRouteReloaded(Route route, int index, int total);
 
     /**
      * Creates an {@link CamelEvent} when an {@link org.apache.camel.Exchange} has been created
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
index f04c267..c54a1cc 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/DefaultEventFactory.java
@@ -131,8 +131,8 @@ public class DefaultEventFactory implements EventFactory {
     }
 
     @Override
-    public CamelEvent createRouteReloaded(Route route) {
-        return new RouteReloadedEvent(route);
+    public CamelEvent createRouteReloaded(Route route, int index, int total) {
+        return new RouteReloadedEvent(route, index, total);
     }
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/RouteReloadedEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/RouteReloadedEvent.java
index 651bc22..de2ea8c 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/RouteReloadedEvent.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/RouteReloadedEvent.java
@@ -23,8 +23,23 @@ public class RouteReloadedEvent extends AbstractRouteEvent implements CamelEvent
 
     private static final long serialVersionUID = 7966471393751298718L;
 
-    public RouteReloadedEvent(Route source) {
+    private final int index;
+    private final int total;
+
+    public RouteReloadedEvent(Route source, int index, int total) {
         super(source);
+        this.index = index;
+        this.total = total;
+    }
+
+    @Override
+    public int getIndex() {
+        return index;
+    }
+
+    @Override
+    public int getTotal() {
+        return total;
     }
 
     @Override
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
index fcc8f39..a480ee4 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/EventHelper.java
@@ -462,7 +462,7 @@ public final class EventHelper {
         return answer;
     }
 
-    public static boolean notifyRouteReloaded(CamelContext context, Route route) {
+    public static boolean notifyRouteReloaded(CamelContext context, Route route, int index, int total) {
         ManagementStrategy management = context.getManagementStrategy();
         if (management == null) {
             return false;
@@ -490,7 +490,7 @@ public final class EventHelper {
 
             if (event == null) {
                 // only create event once
-                event = factory.createRouteReloaded(route);
+                event = factory.createRouteReloaded(route, index, total);
                 if (event == null) {
                     // factory could not create event so exit
                     return false;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
index e765e01..a9848e3 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
@@ -200,9 +200,11 @@ public class RouteWatcherReloadStrategy extends FileWatcherResourceReloadStrateg
             }
 
             // fire events for routes reloaded
+            int index = 1;
+            int total = ids.size();
             for (String id : ids) {
                 Route route = getCamelContext().getRoute(id);
-                EventHelper.notifyRouteReloaded(getCamelContext(), route);
+                EventHelper.notifyRouteReloaded(getCamelContext(), route, index++, total);
             }
 
             if (!removeAllRoutes) {