[
https://issues.apache.org/jira/browse/CAMEL-24321?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18101215#comment-18101215
]
Guillaume Nodet commented on CAMEL-24321:
-----------------------------------------
This issue is being investigated by a coding agent (Claude Code on behalf of
gnodet).
_Note: This comment was generated by a coding agent and requires manual
verification._
> Stream caching: allow the spool directory to be resolved per-Exchange
> ---------------------------------------------------------------------
>
> Key: CAMEL-24321
> URL: https://issues.apache.org/jira/browse/CAMEL-24321
> Project: Camel
> Issue Type: Improvement
> Components: came-core
> Affects Versions: 4.14.2
> Reporter: Kalithas Sendrayan
> Assignee: Guillaume Nodet
> Priority: Major
>
> h3. Use case
> Multi-route runtimes need each route's spilled bytes to go to a caller-decided
> directory. For example:
> * We need each route's spool data isolated (route A's payloads must not
> share a directory with route B's)
> * We need to monitor spool directory usage at the route level
> h3. Current behavior
> Stream caching is scoped per CamelContext: the spool directory is resolved
> once
> at startup (DefaultStreamCachingStrategy.doStart() via TempDirHelper) into a
> single directory. Every route that spills to disk uses that one context-wide
> directory.
> h3. Limitation
> The Exchange is available where CachedOutputStream is constructed (and it
> carries
> the route id via getFromRouteId()), but it is dropped before the directory is
> chosen.
> FileInputStreamCache.TempFileManager.createOutputStream(StreamCachingStrategy)
> resolves the location from the no-arg strategy.getSpoolDirectory() and never
> sees
> the Exchange:
> {code:java}
> tempFile = FileUtil.createTempFile("cos", ".tmp",
> strategy.getSpoolDirectory());
> {code}
> So even a custom StreamCachingStrategy cannot make a per-route decision - the
> information it needs - the Exchange, from which the route id is available - is
> not passed to the point where the directory is selected.
> h3. Expected capability
> A way to choose the spool directory per route (per Exchange), so a custom
> StreamCachingStrategy can direct each route's spilled bytes to its own
> directory.
> h3. Steps to reproduce
> # Configure stream caching with spooling enabled (low spool threshold).
> # Deploy two routes intended to spill into different directories.
> # Send a large body (over the threshold) to each so both spill to disk.
> # Both temp files land in the same context-wide spool directory - there is no
> API to make them differ per route.
> h3. Environment / version
> Reproduced on Apache Camel 4.14.2. The stream-cache classes are in
> camel-support
> (CachedOutputStream, FileInputStreamCache); the strategy is in
> camel-base-engine
> (DefaultStreamCachingStrategy).
> h3. Relevant implementation references
> * org.apache.camel.converter.stream.CachedOutputStream (camel-support)
> * org.apache.camel.converter.stream.FileInputStreamCache (camel-support;
> inner TempFileManager)
> * org.apache.camel.impl.engine.DefaultStreamCachingStrategy
> (camel-base-engine; doStart via TempDirHelper)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)