Claus Ibsen created CAMEL-24866:
-----------------------------------

             Summary: camel-support - route reload fails with duplicate route 
id when a new file is added next to a file with several routes
                 Key: CAMEL-24866
                 URL: https://issues.apache.org/jira/browse/CAMEL-24866
             Project: Camel
          Issue Type: Bug
          Components: camel-jbang, camel-core
    Affects Versions: 4.22.0
            Reporter: Claus Ibsen
             Fix For: 4.23.0


Reproduce with a running dev-mode app whose route file has more than one route, 
for example {{camel run --source-dir=. --dev}} with a {{sql.camel.yaml}} 
holding three routes. Add a second route file to the directory:

{code}
- route:
    id: hello
    from:
      uri: timer
      parameters:
        timerName: hello
        period: 3000
      steps:
        - log:
            message: "hello from a new file"
{code}

The reload stops all routes and then fails, so nothing runs until the next 
successful save:

{noformat}
WARN  FileWatcherResourceReloadStrategy : Error reloading routes from file: 
.../hello.camel.yaml
org.apache.camel.FailedToStartRouteException: Failed to start route: 
create-table because: duplicate route id detected create-table. Please correct 
ids to be unique among all your routes.
    at 
org.apache.camel.impl.engine.DefaultRoutesLoader.updateRoutes(DefaultRoutesLoader.java:308)
    at 
org.apache.camel.support.RouteWatcherReloadStrategy.onRouteReload(RouteWatcherReloadStrategy.java:319)
{noformat}

Cause: {{RouteWatcherReloadStrategy.onRouteReload}} collects the sources to 
load again from {{getCamelContext().getRoutes()}}, adding each route's source 
resource to a list and only skipping the changed resource. A file with N routes 
is added N times, {{DefaultRoutesLoader.updateRoutes}} loads it N times, and 
the second copy trips the duplicate route id check. A change to an existing 
file is not affected because that file is the excluded one; the failure needs a 
new file (or a properties file when the reload is triggered with all routes) 
next to a multi-route file.

Fix: add a source only once per location (the same comparison 
{{equalResourceLocation}} already uses).

Found while running the camel-jbang-mcp server stepwise benchmark: the model 
added a route file next to the example's three-route file and the app went down 
with this error.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to