[ 
https://issues.apache.org/jira/browse/CAMEL-26302?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-26302 started by shashank.
----------------------------------------
> camel-ehcache - removing the route that consumes from a cache closes the 
> cache that the other routes still use, so every cache action fails with 
> "State is UNINITIALIZED"
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26302
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26302
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-ehcache
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>
> When a route is removed, the core stops and shuts down the endpoint of its 
> consumer ({{RouteService.doShutdown}}), also when other routes still use the 
> same endpoint. For an ehcache endpoint this releases caches that other routes 
> still hold (main c536c99caaaa):
> * {{EhcacheEndpoint.doStop}} (line 112) releases the endpoint's reference on 
> its {{EhcacheManager}}. Without {{cacheManager}}, 
> {{cacheManagerConfiguration}} or {{configurationUri}} the endpoint has its 
> own cache manager, so this is the last reference and it closes the 
> {{CacheManager}} with all its caches.
> * {{EhcacheEndpoint.doShutdown}} (line 118) shuts the {{EhcacheManager}} 
> down, which closes every cache it created without a configuration 
> ({{EhcacheManager.doShutdown}}, line 66). With {{cacheManager}}, 
> {{cacheManagerConfiguration}} or {{configurationUri}} the manager is shared 
> by all the endpoints that use it, so this closes the caches of other 
> endpoints too.
> The producers of the other routes keep the {{Cache}} they got when they were 
> created, so from then on every action (PUT, GET, ...) fails with 
> {{IllegalStateException: State is UNINITIALIZED}}, also after the removed 
> route is added again. Nothing else is logged.
> Examples:
> # {{from("ehcache:orders?configuration=#ordersConfig")}} (a route that reacts 
> to cache events) and {{to("ehcache:orders?configuration=#ordersConfig")}} in 
> other routes. As each endpoint uri without a cache manager option has its own 
> cache manager (CAMEL-26237), a consumer and a producer of the same cache must 
> use the same uri, so they share the endpoint. Removing the event route breaks 
> the producer routes.
> # {{cacheManager=#myManager}} on all endpoints, with some caches configured 
> in the manager and others created on demand: removing a route that consumes 
> events of a configured cache closes the on-demand caches of the other 
> endpoints.
> A route is removed by a route reload (dev mode, route watcher), a removed 
> route template or Kamelet, JMX or the control bus.
> *Fix*: the producers and consumers hold a reference on the {{EhcacheManager}} 
> while they are started (as the endpoints already do), so the cache manager is 
> closed by the last of them; an endpoint shuts the {{EhcacheManager}} down 
> only when nothing uses it any more, and the last reference also closes the 
> caches created without a configuration (an endpoint shut down with a removed 
> route is not shut down again). {{EhcacheManagerTest}} now counts the 
> producers too (4 references for two endpoints with their producers instead of 
> 2).
> *Tests*: new {{EhcacheRemoveRouteTest}}: {{removeEventRouteOfSameEndpoint}}, 
> {{removeEventRouteOfSharedCacheManager}}, {{removeEventRouteThenAddItAgain}} 
> and {{removeEventRouteThenStopClosesCacheCreatedOnDemand}} fail on main (3 
> runs, each with {{IllegalStateException: State is UNINITIALIZED}} on the 
> first action after the removal) and pass with the fix. With the fix 
> camel-ehcache has 77 tests, 0 failures.
> *How it was found*: a code sweep for endpoints whose {{doStop}} releases 
> something that other routes on the same uri still use, after a random 
> lifecycle-sequence harness found the same kind of defect in camel-disruptor 
> (CAMEL-26286).
> *Affected*: main, camel-4.22.x, camel-4.18.x and camel-4.14.x (same 
> {{doStop}}/{{doShutdown}}; read, not run).
> *Related*: CAMEL-26237 (each endpoint uri without a cache manager option 
> builds its own cache manager; a consumer on a cache without configuration 
> gets no events). Sharing the default cache manager per component, as proposed 
> there, would make the second case above the default one.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to