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/11/26 08:33:40 UTC

[camel] 02/02: CAMEL-17233: Ensure route definition is removed when a route is removed

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 606586abd5b722da3eb991e1d75fd76ddc2db852
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Nov 26 09:21:34 2021 +0100

    CAMEL-17233: Ensure route definition is removed when a route is removed
---
 .../main/java/org/apache/camel/CamelContext.java   |  2 +-
 .../org/apache/camel/impl/DefaultCamelContext.java | 14 +++++++++++++
 .../apache/camel/impl/engine/RouteRemove2Test.java | 23 ++++++++++++----------
 3 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 436c270..8ef73c0 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -600,7 +600,7 @@ public interface CamelContext extends CamelContextLifecycle, RuntimeConfiguratio
      *
      * @param  routeId   the route id
      * @return           <tt>true</tt> if the route was removed, <tt>false</tt> if the route could not be removed
-     *                   because its not stopped
+     *                   because it's not stopped
      * @throws Exception is thrown if the route could not be shutdown for whatever reason
      */
     boolean removeRoute(String routeId) throws Exception;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
index d66704f..a1601fb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
@@ -29,6 +29,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToStartRouteException;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
@@ -945,6 +946,19 @@ public class DefaultCamelContext extends SimpleCamelContext implements ModelCame
         getTransformerRegistry().put(createTransformerKey(def), transformer);
     }
 
+    @Override
+    protected synchronized boolean removeRoute(String routeId, LoggingLevel loggingLevel) throws Exception {
+        boolean removed = super.removeRoute(routeId, loggingLevel);
+        if (removed) {
+            // must also remove the route definition
+            RouteDefinition def = getRouteDefinition(routeId);
+            if (def != null) {
+                removeRouteDefinition(def);
+            }
+        }
+        return removed;
+    }
+
     private static ValueHolder<String> createTransformerKey(TransformerDefinition def) {
         return ObjectHelper.isNotEmpty(def.getScheme())
                 ? new TransformerKey(def.getScheme())
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/engine/RouteRemove2Test.java b/core/camel-core/src/test/java/org/apache/camel/impl/engine/RouteRemove2Test.java
index 060c627..817e8da 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/engine/RouteRemove2Test.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/engine/RouteRemove2Test.java
@@ -22,16 +22,18 @@ import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class RouteRemove2Test extends ContextTestSupport {
 
     @Test
     public void testRemove() throws Exception {
         DefaultCamelContext defaultContext = (DefaultCamelContext) context;
-        assertEquals(2, context.getRoutes().size(), "2 routes to start with");
-        assertEquals(2, context.getRouteDefinitions().size(), "2 routes to start with");
-        assertEquals(2, defaultContext.getRouteStartupOrder().size(), "2 routes to start with");
-        assertEquals(2, defaultContext.getRouteServices().size(), "2 routes to start with");
+        assertEquals(2, context.getRoutes().size());
+        assertEquals(2, context.getRouteDefinitions().size());
+        assertEquals(2, defaultContext.getRouteStartupOrder().size());
+        assertEquals(2, defaultContext.getRouteServices().size());
 
         getMockEndpoint("mock:foo").expectedMessageCount(1);
         getMockEndpoint("mock:bar").expectedMessageCount(1);
@@ -54,8 +56,9 @@ public class RouteRemove2Test extends ContextTestSupport {
         assertMockEndpointsSatisfied();
 
         // remove foo route and bar should continue to be functional
-        context.removeRoute("foo");
-        assertEquals(null, context.getRouteController().getRouteStatus("foo"), "There should be no foo route anymore");
+        boolean removed = context.removeRoute("foo");
+        assertTrue(removed, "Route should be removed");
+        assertNull(context.getRouteController().getRouteStatus("foo"), "There should be no foo route anymore");
         assertEquals("Started", context.getRouteController().getRouteStatus("bar").name());
 
         resetMocks();
@@ -66,10 +69,10 @@ public class RouteRemove2Test extends ContextTestSupport {
         template.sendBody("seda:bar", "Hello World");
         assertMockEndpointsSatisfied();
 
-        assertEquals(1, context.getRoutes().size(), "1 routes to end with");
-        assertEquals(1, context.getRouteDefinitions().size(), "1 routes to end with");
-        assertEquals(1, defaultContext.getRouteStartupOrder().size(), "1 routes to end with");
-        assertEquals(1, defaultContext.getRouteServices().size(), "1 routes to end with");
+        assertEquals(1, context.getRoutes().size());
+        assertEquals(1, context.getRouteDefinitions().size());
+        assertEquals(1, defaultContext.getRouteStartupOrder().size());
+        assertEquals(1, defaultContext.getRouteServices().size());
     }
 
     @Override