Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-11656

Support default directory sorter for FileConsumer

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments


    • Type: Improvement
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.19.0
    • Fix Version/s: 2.21.0
    • Component/s: camel-core
    • Labels:
    • Estimated Complexity:



      The current way of sorting consumed files isn't very flexible due to how it's implemented:

      Files are sorted AFTER they're added to in progress repository what in combination with maxMessagesPerPoll set to be > 0 and eagerLimitMaxMessagesPerPoll set to false forces the removeExcessiveInProgressFiles call - which in case of persistent idempotent repository used causes redundant calls to a database.

      This is not only the issue.

      In my case I have a logic in a custom file filter that a file shouldn't be processed if a file with a same prefix is already in progress while still those files should be processed in a specified order.

      The issue is that since sorting is performed after each file is added to in progress repository and before added there a file should be accepted by a filter but it will be not - as a previous file with a same prefix has already been added to in progress repo.

      Example: files - test.001, test.002, test.003
      If test.003 is first in a returned file list then it will be added to in progress repository and next files will not be accepted due to the same prefix.
      Default sorting would solve this issue.

      It would be great if default sorter can be specified for FileConsumer in the pollDirectory method:

        log.trace("Polling directory: {}", directory.getPath());
              File[] dirFiles = directory.listFiles();
              if (dirFiles == null || dirFiles.length == 0) {
                  // no files in this directory to poll
                  if (log.isTraceEnabled()) {
                      log.trace("No files found in directory: {}", directory.getPath());
                  return true;
              } else {
                  // we found some files
                  if (log.isTraceEnabled()) {
                      log.trace("Found {} in directory: {}", dirFiles.length, directory.getPath());
              List<File> files = Arrays.asList(dirFiles);
             // sort there?




            • Assignee:
              onders Onder Sezgin
              oceansize Viktor Khoroshko


              • Created:

                Issue deployment