[
https://issues.apache.org/jira/browse/CAMEL-25032?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-25032.
---------------------------------
Fix Version/s: 4.23.0
Resolution: Fixed
Fixed by the same change: https://github.com/apache/camel/pull/26915, merged as
1d7ff7a188f1. The batching and the retry-when-properties-change of the closed
PR 26907 are part of it, and the scan makes one save one set of changed files
so the route is built with the properties of that save already applied.
> 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
> Priority: Major
> Fix For: 4.23.0
>
>
> 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)