Urmila Unni created CAMEL-25778:
-----------------------------------
Summary: camel-file - the consumer can route a file twice when the
exchange is completed on another thread
Key: CAMEL-25778
URL: https://issues.apache.org/jira/browse/CAMEL-25778
Project: Camel
Issue Type: Bug
Components: camel-file
Reporter: Urmila Unni
When a route hands the exchange off to another thread after a file consumer (an
async delay, threads, seda or disruptor), the exchange is committed on that
thread while the file consumer keeps polling. A poll can then route a file a
second time after it was already moved:
1. the poll lists the directory while the file is still there,
2. another thread commits the exchange: GenericFileOnCompletion moves the file
(for example to .camel) and then removes it from the in-progress repository,
3. the poll reaches the in-progress check in GenericFileConsumer.isValidFile
for that file after the removal, so the check passes and the already-moved file
is routed again. Its commit then fails with "Cannot rename file".
Found while fixing CAMEL-25647 (FileDisruptorShutdownCompleteAllTasksTest: a
file route with an async delay(1000) to a disruptor endpoint). Log of one
failing run, for b.txt:
{noformat}
12.619 [disruptor://foo] Done processing file: GenericFile[b.txt]
12.637 [disruptor://foo] Renaming file: GenericFile[b.txt] to:
GenericFile[.camel\b.txt]
12.663 [arget/disruptor] Took 41ms to poll: target\disruptor
12.663 [arget/disruptor] Total 1 files to consume
12.667 [arget/disruptor] About to process file: GenericFile[b.txt]
13.685 [disruptor://foo] WARN Error during commit ... Cannot rename file:
GenericFile[b.txt] to: GenericFile[.camel\b.txt]
{noformat}
The poll that picked up b.txt the second time took 41 ms, so it started at
about 12.622, before the rename at 12.637.
Possible fix, suggested in the review of
https://github.com/apache/camel/pull/28039: check that the file still exists
after it was added to the in-progress repository.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)