[
https://issues.apache.org/jira/browse/CAMEL-26303?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26303 started by shashank.
----------------------------------------
> camel-browse - stopping the route that consumes from a browse endpoint makes
> every send to it fail, and removing that route makes them fail with a
> NullPointerException
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26303
> URL: https://issues.apache.org/jira/browse/CAMEL-26303
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> {{BrowseEndpoint}} keeps the processor of its consumer from
> {{createConsumer}} on ({{onExchangeProcessor}}, main c536c99caaaa line 121)
> and calls it from {{onExchange}} for every exchange a producer sends to the
> endpoint. Two consequences for a route {{from("browse:orders")}} next to the
> routes that send {{to("browse:orders")}} (sending to a browse endpoint is the
> use the component page documents; {{BrowseRouteConsumeTest}} has both):
> # *The consuming route is stopped*: the producers still call the processor of
> the stopped route. On main the exchange then fails with
> {{RouteStoppingException: The exchange cannot continue: its route is being
> stopped or reloaded}} (CAMEL-25502), so the routes that send to the endpoint
> fail for as long as the consuming route is stopped. On camel-4.22.x and older
> (no {{RouteStoppingException}}) the stopped route still processes the
> exchanges (read, not run).
> # *The consuming route is removed*: the core stops the endpoint of its
> consumer ({{RouteService.doShutdown}}) although the other routes still send
> to it, {{doStop}} sets the list of exchanges to null (line 189), and every
> send fails with {{NullPointerException: Cannot invoke
> "java.util.List.add(Object)" because "this.exchanges" is null}} (line 170)
> until the route is added again.
> *Fix*: the consumer sets the processor when it starts and clears it when it
> stops (only its own); the endpoint clears its list at stop but keeps it, so
> the routes that send to it keep working. The consumer becomes a named class
> ({{BrowseConsumer}}) instead of a plain {{DefaultConsumer}}. No option or
> documented behaviour changes.
> *Tests*: new {{BrowseRemoveRouteTest}} (camel-core, where the browse tests
> are): {{removeConsumerRoute}} (NullPointerException) and
> {{stoppedConsumerGetsNoMessage}} (RouteStoppingException) fail on main (3
> runs) and pass with the fix. With the fix the browse tests of camel-core (14)
> and the browsable endpoint tests of camel-management (21) pass.
> *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 (both), camel-4.22.x, camel-4.18.x and camel-4.14.x (same
> code; the removal NPE, and the stopped route that still gets the exchanges;
> read, not run).
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)