[ 
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)

Reply via email to