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