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

ftp component: Errors during file download bypass redelivery and goes directly to the deadletterchannel

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Won't Fix
    • Affects Version/s: 2.17.3, 2.18.0
    • Fix Version/s: None
    • Component/s: camel-ftp
    • Labels:
      None
    • Environment:

      Behavior verified on MS Windows 7 (Spring Boot based application) and MacOS (set based on "camel-example-ftp").

    • Estimated Complexity:
      Unknown

      Description

      When the FTP consumer is hit by an error during download of a file (eg. socket timeout or because of missing read permission on the file) a GenericFileOperationFailedException is thrown. Unfortunately is impossible to recover from this error using redelivery because the message is forced onto the deadletterchannel (marked exhausted?)

      When using consumer.bridgeErrorHandler=true redelivery works fine when the errors happens during the polling phase (eg. connection timeouts and missing directories).

      When the error goes directly to the deadletterchannel the rollback method of the PollingConsumerPollStrategy is never called. This makes it difficult to access the consumer and force a disconnect in order to recover from the error situtation (like it is done by RemoteFilePollingConsumerPollStrategy).

      [DefaultQuartzScheduler-camel-1_Worker-1] INFO org.apache.camel.example.ftp.ConsumerPollStrategy - Poll starting for endpoint: ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fil...
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.component.file.remote.FtpConsumer - Exception checking connection status: File operation failed: null Connection is not open. Code: 0
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.component.file.remote.FtpConsumer - Not connected/logged in, connecting to: ftp://testuser@localhost:21
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.component.file.remote.FtpConsumer - Connected and logged in to: ftp://testuser@localhost:21
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.component.file.remote.FtpConsumer - Took 0.151 seconds to poll: testdir
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.component.file.remote.FtpConsumer - Total 1 files to consume
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.processor.DeadLetterChannel - Failed delivery for (MessageId: ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-2 on ExchangeId: ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-3). On delivery attempt: 0 caught: org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: RemoteFile[testfile.txt] from: ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fileName=testfile.txt&password=xxxxxx&pollStrategy=%23try3times&processStrategy=%23myProcessStrategy&scheduler=quartz2&scheduler.cron=15+0%2F1+*+%3F+*+*&throwExceptionOnConnectFailed=true&timeout=5000&username=testuser
      org.apache.camel.component.file.GenericFileOperationFailedException: Cannot retrieve file: RemoteFile[testfile.txt] from: ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fileName=testfile.txt&password=xxxxxx&pollStrategy=%23try3times&processStrategy=%23myProcessStrategy&scheduler=quartz2&scheduler.cron=15+0%2F1+*+%3F+*+*&throwExceptionOnConnectFailed=true&timeout=5000&username=testuser
      at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:436)
      at org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:137)
      at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:227)
      at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:191)
      at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)
      at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)
      at org.apache.camel.pollconsumer.quartz2.QuartzScheduledPollConsumerJob.execute(QuartzScheduledPollConsumerJob.java:61)
      at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
      at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.processor.SendProcessor - >>>> direct://deadletter Exchange[ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-3]
      [DefaultQuartzScheduler-camel-1_Worker-1] INFO org.apache.camel.processor.interceptor.Tracer - ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-3 >>> (route1) from(ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fileName=testfile.txt&password=testpass&pollStrategy=%23try3times&processStrategy=%23myProcessStrategy&scheduler=quartz2&scheduler.cron=15+0%2F1+*+%3F+*+*&throwExceptionOnConnectFailed=true&timeout=5000&username=testuser) --> log[On dead letter!!] <<< Pattern:InOnly, Headers:

      {breadcrumbId=ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-2}

      , BodyType:String, Body:Error processing file RemoteFile[testfile.txt] due to Cannot retrieve file: RemoteFile[testfile.txt] from: ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fileName=testfile.txt&password=xxxxxx&pollStrategy=%23try3times&processStrategy=%23myProcessStrategy&scheduler=quartz2&scheduler.cron=15+0%2F1+*+%3F+*+*&throwExceptionOnConnectFailed=true&timeout=5000&username=testuser
      [DefaultQuartzScheduler-camel-1_Worker-1] INFO route1 - On dead letter!!
      [DefaultQuartzScheduler-camel-1_Worker-1] DEBUG org.apache.camel.processor.Pipeline - Message exchange has failed: so breaking out of pipeline for exchange: Exchange[ID-Klauss-MacBook-Pro-2-local-52649-1478165172245-0-3] Handled by the error handler.
      [DefaultQuartzScheduler-camel-1_Worker-1] INFO org.apache.camel.example.ftp.ConsumerPollStrategy - Commiting 1 msgs for endpoint: ftp://localhost:21/testdir?autoCreate=false&consumer.bridgeErrorHandler=true&fil...

        Attachments

        1. ConsumerPollStrategy.java
          1 kB
          Klaus Johansen
        2. MyFtpServer.java
          1 kB
          Klaus Johansen
        3. MyFtpServerRouteBuilder.java
          2 kB
          Klaus Johansen

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              Kluggi Klaus Johansen
            • Votes:
              2 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: