Claus Ibsen created CAMEL-25032:
-----------------------------------

             Summary: Dev mode: a route saved together with a property it uses 
fails to reload and keeps running the previous version
                 Key: CAMEL-25032
                 URL: https://issues.apache.org/jira/browse/CAMEL-25032
             Project: Camel
          Issue Type: Bug
          Components: camel-core
            Reporter: Claus Ibsen


In dev mode a reload is per file, and the file watcher hands the changed files 
of one batch to the reload strategy in whatever order the OS reported them. A 
route file and the properties file are reloaded one after the other, and a 
route is built with the properties of the moment, so saving a route together 
with a property it uses fails when the route goes first:

{noformat}
20:41:39.613 WARN  Reload failed due to: Failed to create route: welcome at: 
>>> Log[Welcome to {{shop.name}}, prices in {{shop.currency}}] <<<
                   ... Property with key [shop.currency] not found in 
properties from text: Welcome to Camel Shop, prices in {{shop.currency}}
20:41:39.613 INFO  Reloading properties: file:.../application.properties
20:41:39.616 INFO  Routes reloaded summary (total:1 started:1)
{noformat}

Three milliseconds later the properties are reloaded, and the property is 
there. But the route is not the saved one: the failed reload restored the 
content that last ran (CAMEL-24860 / CAMEL-24899), and the route reload that 
the properties change triggers reloads that restored content, not the file on 
disk. The application keeps logging the old message, and "Routes reloaded 
summary (total:1 started:1)" says everything is fine. Only touching the route 
file again brings the saved version in.

Two changes:

* {{FileWatcherResourceReloadStrategy}} reloads the {{.properties}} files of a 
batch before the other files, so a route saved together with a property it uses 
is built with that property in place. The sort is stable, so files of the same 
kind keep their reported order.
* {{RouteWatcherReloadStrategy}} remembers the sources of a failed reload and, 
when the properties change, loads those from disk again instead of reloading 
the restored content. This covers the case the ordering cannot: a route saved 
on its own that fails on a missing property, and the property added in a later 
save. That is the normal way to fix the error by hand -- see the message, add 
the property -- and today it does not bring the route back.

Found while measuring how well a local model can write Camel routes with the 
camel-jbang-mcp server: the model adds a property and uses it in the same step, 
and the route silently kept running its previous version.




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

Reply via email to