GenericFileConsumer fails to pick up all files in a directory if there are more 
files than maxMessagePerPoll setting
--------------------------------------------------------------------------------------------------------------------

                 Key: CAMEL-1824
                 URL: https://issues.apache.org/activemq/browse/CAMEL-1824
             Project: Apache Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 2.0-M2
            Reporter: Alexander Lee


Camel adds filenames it is processing to an in memory, in progress map.  Once 
it is finished processing it removes them.  If we specific a maxMessagesPerPoll 
number less then the files in a directory, it only processes up to the number 
of files we specify for each poll.  It then removes the rest from the in 
progress map and tries them again next poll.  This is the code (from 
GenericFileConsumer:processBatch()) for the last part:

       for (int index = 0; index < exchanges.size() && isRunAllowed(); index++) 
{
            GenericFileExchange<T> exchange = (GenericFileExchange<T>) 
exchanges.poll();
            String key = exchange.getGenericFile().getFileName();
            endpoint.getInProgressRepository().remove(key);
        }
 
Unfortunately, as you can see it uses exchanges.size() to determine how many 
file names to remove (i.e. how many times to loop), however exchanges.poll() 
removes one from the head of exchanges for each loop.  This means that the 
exchanges.size() reduces by one for each loop, which means it only cleans up 
half of the filenames that are in exchanges, which means these files are never 
picked up again as Camel thinks it is still processing them.

The fix is to replace the for loop with a while:

        while ((exchanges.size() > 0) && isRunAllowed()) {
            GenericFileExchange<T> exchange = (GenericFileExchange<T>) 
exchanges.poll();
            String key = exchange.getGenericFile().getFileName();
            endpoint.getInProgressRepository().remove(key);
        }




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to