[
https://issues.apache.org/jira/browse/CAMEL-26123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-26123.
---------------------------------
Resolution: Fixed
Fixed by https://github.com/apache/camel/pull/28902 (merged to main as
1635587b1f9096fef07c59985ca0bb906d70fe7d).
_Claude Code on behalf of Claus Ibsen (davsclaus)_
> camel-optaplanner - with configFile a new SolverManager is created per
> exchange and never closed (thread leak), and consumers get the events of
> every CamelContext
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26123
> URL: https://issues.apache.org/jira/browse/CAMEL-26123
> Project: Camel
> Issue Type: Bug
> Components: camel-optaplanner
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of flink, spring-batch and
> optaplanner (CAMEL-24961, PR #28418).
> h4. 1. With configFile and no solverManager, every exchange leaks a
> SolverManager and its threads
> {{OptaPlannerProducer.getSolverManager}} (main 2a465aa4814c, line 145)
> creates a new {{SolverManager}} from the {{configFile}} for each exchange
> when no {{solverManager}} is configured, and it is never closed. Checked on
> 4.24.0-SNAPSHOT with the CloudBalance example: the live threads went from 16
> to 35 after 20 calls.
> Proposed: create the SolverManager once per endpoint (in doStart) and close
> it in doStop.
> h4. 2. Solvers and listeners are JVM-wide, keyed only by problemId
> {{OptaPlannerEndpoint}} keeps the solvers and the solution listeners in
> static maps ({{SOLVERS}} and {{SOLUTION_LISTENER}}, main 2a465aa4814c, lines
> 41-42), the listeners keyed only by {{problemId}}, which defaults to 1
> ({{OptaPlannerConfiguration}} line 38). A consumer in any CamelContext of the
> JVM receives the best solutions of every async producer with the same
> problemId. Checked on 4.24.0-SNAPSHOT with the CloudBalance example.
> Proposed: keep the solvers and listeners per endpoint (or per CamelContext
> and solver config), not in static maps.
> h4. 3. Sync mode sends no events to consumers
> With {{async=false}} the producer calls {{solverManager.solve(problemId,
> body)}} ({{OptaPlannerProducer}}, main 2a465aa4814c, line 101) without a best
> solution listener, so a consumer on the same problem gets no events, unlike
> async mode. Checked on 4.24.0-SNAPSHOT with the CloudBalance example.
> Proposed: also notify the consumers of the final best solution in sync mode,
> or document that consumers only work with async producers.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)