byungkyu.han created CAMEL-19456:
------------------------------------
Summary: The invocation of the removeRoute() method is too slow
when using RAW().
Key: CAMEL-19456
URL: https://issues.apache.org/jira/browse/CAMEL-19456
Project: Camel
Issue Type: Bug
Components: came-core
Reporter: byungkyu.han
When the removeRoute() method is called on AbstractCamelContext, it attempts to
remove the endpoints from the EndpointRegistry. However, if the keys do not
match, it invokes the matchEndpoint() method. The more endpoints there are, and
the larger the number of endpoints that need to be removed, the slower the
process becomes.
{code:java}
@Test
public void testRemoveRoute() throws Exception {
DefaultCamelContext ctx = new DefaultCamelContext(false);
ctx.disableJMX();
ctx.getRegistry().bind("UtilBean", UtilBean.class);
ctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").routeId("coolRoute").to("bean:UtilBean?method=RAW(convertToJson('aa
a',${body}))")
.to("bean:UtilBean?method=RAW(convertToJson(*,'aa
a',${body}))");
}
});
ctx.start();
EndpointRegistry<NormalizedUri> endpoints = ctx.getEndpointRegistry();
Map<String, RouteService> routeServices = ctx.getRouteServices();
Set<Endpoint> routeEndpoints =
routeServices.get("coolRoute").gatherEndpoints();
for(Endpoint endpoint : routeEndpoints) {
Endpoint oldEndpoint =
endpoints.remove(ctx.getEndpointKey(endpoint.getEndpointUri()));
assertNotNull(oldEndpoint); //fail
}
}
// 코드 자리 표시자
{code}
The reason for the mismatch in keys is that when creating the NormalizeUri,
the RAW() syntax is used, which does not apply the
UnsafeUriCharactersEncoder.encode. However, during Endpoint creation, the
UnsafeUriCharactersEncoder.encode is used. This inconsistency in the encoding
process leads to different keys being generated for the endpoints between the
NormalizeUri and Endpoint creation. As a result, when removing routes, the keys
used for removal may not match exactly with the keys stored in the
EndpointRegistry.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)