Hi Claus - that did the trick. Thanks for your speedy reply! Perhaps the
Javadoc in ConsumerTemplate's receive methods can be amended to reflect
this? I was thrown off initially by the comment there. Happy to make
amendments if worthwhile.

On Mon, Aug 31, 2020 at 11:36 AM Claus Ibsen <claus.ib...@gmail.com> wrote:

> Hi
>
> SEDA is built with queueing in mind so those uow works gets handed
> over when the exchange is placed on the queue.
> direct does not so the route with sftp consumer will done the uow. And
> then you do it again with the consumer template.
>
>
> On Mon, Aug 31, 2020 at 2:44 PM Anthony Wu <anthony...@toasttab.com>
> wrote:
> >
> > Thanks Claus. Using SEDA seems to work, but it does seem strange that the
> > exchange is being "done" twice (or something else done two times). The
> > meaning of this was to test some functionality of an existing route.
> Should
> > that existing route be changed to SEDA in that case?
> >
> > On Mon, Aug 31, 2020 at 7:01 AM Claus Ibsen <claus.ib...@gmail.com>
> wrote:
> >
> > > Hi
> > >
> > > It smells a bit that is called twice because you are doing something a
> > > bit unusual, with having a route that you then consume via a template
> > > via direct.
> > > Use seda instead or dont have a route but use the ftp url directly in
> > > the consumer template.
> > >
> > > On Fri, Aug 28, 2020 at 2:37 AM Anthony Wu <anthony...@toasttab.com>
> > > wrote:
> > > >
> > > > Hello Camel users,
> > > >
> > > > I've noticed some odd behavior with the SFTP component in combination
> > > > with "move" that I was hoping I could get some clarity on - perhaps
> > > > it's a misconfiguration or misunderstanding on my end. Given a route
> > > > using the component as a consumer like the following:
> > > >
> > > > public class DownloadAndRenameSftpRoute extends RouteBuilder {
> > > >     @Override
> > > >     public void configure() {
> > > >         from(String.format("sftp:%s:%s/%s?username=%s&password=%s",
> > > >                 SFTP_IP_ADDRESS,
> > > >                 SFTP_PORT,
> > > >                 "test/data",
> > > >                 SFTP_USERNAME,
> > > >                 SFTP_PASSWORD)
> > > >                 + "&download=true"
> > > >                 + "&autoCreate=false"
> > > >                 + "&greedy=true"
> > > >                 + "&move=${file:onlyname}.old"
> > > >                 + "&maxMessagesPerPoll=1"
> > > >                 + "&scheduler=quartz"
> > > >                 + "&scheduler.cron=0/2+*+*+?+*+*+*") // poll every 2
> > > seconds
> > > >             .to("direct:get_file");
> > > >     }
> > > > }
> > > >
> > > > I would expect that on completion of the exchange a file (say
> > > > "garbage") on the remote is successfully renamed from "garbage" to
> > > > "garbage.old". If I do something like:
> > > >
> > > > try (CamelContext context = new DefaultCamelContext()) {
> > > >     context.addRoutes(new DownloadAndRenameSftpRoute());
> > > >     context.start();
> > > >     ConsumerTemplate consumerTemplate =
> context.createConsumerTemplate();
> > > >     Exchange exchange = consumerTemplate.receive("direct:get_file",
> > > 5000L);
> > > >     consumerTemplate.doneUoW(exchange);
> > > >     consumerTemplate.stop();
> > > >     context.stop();
> > > > }
> > > >
> > > > The file /is/ successfully renamed on the remote, but the engine
> seems
> > > > to have a different view of the world, since it complains with the
> > > > following (apologies for the long stack trace):
> > > >
> > > > 2020-08-27 22:02:39.309Z WARN
> > > > org.apache.camel.component.file.GenericFileOnCompletion:212 - Error
> > > > during commit. Exchange[ID-C02YV0J3LVDQ-local-1598565757117-0-3].
> > > > Caused by:
> > > [org.apache.camel.component.file.GenericFileOperationFailedException
> > > > - Cannot rename file from: test/data/garbage to:
> > > > test/data/garbage.old]
> > > > org.apache.camel.component.file.GenericFileOperationFailedException:
> > > > Cannot rename file from: test/data/garbage to: test/data/garbage.old
> > > > at
> > >
> org.apache.camel.component.file.remote.SftpOperations.renameFile(SftpOperations.java:503)
> > > > ~[camel-ftp-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.strategy.GenericFileProcessStrategySupport.renameFile(GenericFileProcessStrategySupport.java:136)
> > > > ~[camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.strategy.GenericFileRenameProcessStrategy.commit(GenericFileRenameProcessStrategy.java:115)
> > > > ~[camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileOnCompletion.processStrategyCommit(GenericFileOnCompletion.java:132)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileOnCompletion.onCompletion(GenericFileOnCompletion.java:85)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileOnCompletion.onComplete(GenericFileOnCompletion.java:59)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.support.UnitOfWorkHelper.doneSynchronizations(UnitOfWorkHelper.java:91)
> > > > [camel-support-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.impl.engine.DefaultUnitOfWork.done(DefaultUnitOfWork.java:216)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.support.UnitOfWorkHelper.doneUow(UnitOfWorkHelper.java:54)
> > > > [camel-support-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:651)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.processor.CamelInternalProcessor$UnitOfWorkProcessorAdvice.after(CamelInternalProcessor.java:594)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.processor.CamelInternalProcessor$AsyncAfterTask.done(CamelInternalProcessor.java:174)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at org.apache.camel.AsyncCallback.run(AsyncCallback.java:46)
> > > > [camel-api-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at org.apache.camel.processor.Pipeline.process(Pipeline.java:147)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:286)
> > > > [camel-base-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:483)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.remote.RemoteFileConsumer.processExchange(RemoteFileConsumer.java:146)
> > > > [camel-ftp-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:234)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:196)
> > > > [camel-file-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
> > > > [camel-support-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:106)
> > > > [camel-support-3.4.0.jar:3.4.0]
> > > > at
> > >
> org.apache.camel.pollconsumer.quartz.QuartzScheduledPollConsumerJob.execute(QuartzScheduledPollConsumerJob.java:61)
> > > > [camel-quartz-3.4.0.jar:3.4.0]
> > > > at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
> > > [quartz-2.3.2.jar:?]
> > > > at
> > >
> org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
> > > > [quartz-2.3.2.jar:?]
> > > > Caused by: com.jcraft.jsch.SftpException: No such file
> > > > at
> com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
> > > > ~[jsch-0.1.55.jar:?]
> > > > at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1950)
> > > > ~[jsch-0.1.55.jar:?]
> > > > at
> > >
> org.apache.camel.component.file.remote.SftpOperations.renameFile(SftpOperations.java:499)
> > > > ~[camel-ftp-3.4.0.jar:3.4.0]
> > > > ... 25 more
> > > >
> > > > A cursory search online suggests a few things - such as setting
> > > > "stepwise" to the non-default setting - nothing doing there, since I
> > > > get the same error as above. Delving into the code seems to suggest
> > > > JSch and Camel have differing views on what happened, since JSch
> > > > throws an exception claiming the file wasn't found (which Camel
> > > > happily re-throws), but this seems odd given that the file /was/
> > > > renamed after all. I've tested this against an Alpine Linux VM as the
> > > > remote as well as another "real" system and I get the same error. I'm
> > > > on OpenJDK 8, Camel 3.4.0, Mac OS X 10.15.6.
> > > >
> > > > Any pointers as to what's going on are much appreciated!
> > > >
> > > > Best,
> > > > Anthony
> > > >
> > >
> > >
> > > --
> > > Claus Ibsen
> > > -----------------
> > > http://davsclaus.com @davsclaus
> > > Camel in Action 2: https://www.manning.com/ibsen2
> > >
> > >
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>
>

Reply via email to