[
https://issues.apache.org/jira/browse/CAMEL-25960?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-25960 started by shashank.
----------------------------------------
> camel-file - a done file with a fixed name can be deleted by the last file of
> the previous poll when that file completes asynchronously while the next poll
> decides which done files to keep
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25960
> URL: https://issues.apache.org/jira/browse/CAMEL-25960
> Project: Camel
> Issue Type: Bug
> Components: camel-file
> Reporter: shashank
> Assignee: shashank
> Priority: Minor
>
> With a done file with a fixed name ({{doneFileName=ready}}), a poll that
> leaves files of a directory for the next poll keeps the done file, so the
> last file of the poll does not delete it
> ({{GenericFileOnCompletion.handleDoneFile}}, line 199:
> {{keptDoneFiles.isKept(doneFileName)}}).
> When the next poll lists the directory completely,
> {{GenericFileKeptDoneFiles.startBatch(listed, true)}} clears the whole set
> (line 61, {{kept.clear()}}). The done files of the files this poll leaves are
> kept again only later in the same poll: in {{GenericFileConsumer.poll()}} for
> the non-eager {{maxMessagesPerPoll}} cut (line 249, after the exchanges are
> created and sorted), and in {{processBatch}} for a file that is not started
> (line 315) or that is left when the batch stops (line 322).
> If the last file of the previous poll completes in between, on another thread
> (the route continues with {{threads()}}, {{seda}}, or an asynchronous
> producer, so the consumer's next poll can start before that exchange is
> done), {{handleDoneFile}} finds the done file not kept and deletes it. The
> files the new poll then leaves for the next one have no done file, so they
> are not consumed until a new done file is written.
> CAMEL-25772 removed the same kind of window on the cut-listing path; this one
> is on the complete-listing path and is older (CAMEL-25728).
> h3. Reproduction
> Not reproduced by a test yet. Outline: {{doneFileName=ready}},
> {{maxMessagesPerPoll=2}}, {{eagerMaxMessagesPerPoll=false}}, 3 files and
> {{ready}} in the directory; the route hands off with {{threads()}} and its
> processor for the second file blocks on a latch; release it after the next
> poll has called {{startBatch}} (complete listing) and before it re-keeps the
> done file. Expected on main: {{ready}} is deleted and the third file stays in
> the directory.
> h3. Proposed fix
> Decide the kept set of a poll before clearing the old one, or keep the old
> entries until the poll has re-kept its own (for example: compute the done
> files to keep, then replace the set in one step), so a completing exchange of
> the previous poll never sees a done file that both polls keep as not kept.
> Affected: main (e6885df7894d). The kept done files exist since CAMEL-25728
> (4.24 only).
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)