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)