Some FTP servers and platforms requires stepwise. And it has been the default ever since Camel 1.x.
On Thu, May 30, 2013 at 10:23 AM, Bengt Rodehav <be...@rodehav.com> wrote: > Hello Aki - sorry for the late reply. > > Yes, I do realize that the reason for this code is to do a stepwise change > of directories when going back to the "home" directory. What I don't > understand is why this is necessary. It is only done in sftp - not in > ftp/ftps. > > I have never been in any situation where stepwise is needed at all. But, > since stepwise by default is true, I assume that these situations exist > (but I think the default should be not to use stepwise...). But, why would > you have to change directories stepwise when going back up only in sftp but > not in ftp/ftps? > > Also, I always disconnect after each poll (I've found it much more stable) > which means that going back up is totally unnecessary since I will > re-connect on next poll and therefore start in the "home"directory again. > > Of course, fixing the logic might be preferrable to removing it if there is > a need for this kind of logic... > > BTW, do you know why the stepwise option exists? What scenario requires us > to change to a directory in a stepwise fashion instead of changing to that > directory directly? > > /Bengt > > > 2013/5/27 Aki Yoshida <elak...@gmail.com> > >> Hi Bengt, >> the quoted code itself is needed for the normal case to ensure the stepwise >> operation moves the path upwards from the current directory to where it >> started without touching its upper directory which you potentially have no >> authorization to access. >> >> but the code does not handle the case when the path is at the root, as you >> describe. In that case, this code needs to be skipped as it is not needed >> (because you started out from the root and you have authorization down from >> the root to the current directory). >> >> I commented to the ticket. >> >> regards, aki >> >> >> 2013/5/6 Bengt Rodehav <be...@rodehav.com> >> >> > JIRA created: >> > >> > https://issues.apache.org/jira/browse/CAMEL-6335 >> > >> > /Bengt >> > >> > >> > 2013/5/6 Bengt Rodehav <be...@rodehav.com> >> > >> > > Hello Hadrian, >> > > >> > > I'm not really interested in the blame issue. I'm really glad that >> there >> > > are so many competent people developing Camel which I think is a great >> > > product. It might be interesting, though, to see how long the bug has >> > been >> > > there and what versions are affected. >> > > >> > > I've also been thinking why it hasn't been picked up by any tests. I >> > > realize that it must be very difficult to design tests for integration >> > > components like sftp. Ideally you would have a number of ftp/ftps/sftp >> > > servers to perform integration tests against. But I guess that is hard >> to >> > > maintain. I don't think unit tests (with mocking) will catch bugs like >> > the >> > > above. How are ftp/ftps/sftp integrations tested? >> > > >> > > I have noticed that some sftp servers silently ignore attempts to >> change >> > > directory to a non-existing directory - you won't get there but you >> won't >> > > get an error code either. But some will give you an error code (like >> the >> > > one we are integrating to right now). >> > > >> > > I will create a JIRA. As for patching I guess the most important part >> is >> > > to determine if it is necessary to change back to the home directory >> in a >> > > stepwise fashion or not. If not, then I think we can just remove that >> > code. >> > > If it is necessary, then we must instead fix it. >> > > >> > > /Bengt >> > > >> > > >> > > >> > > 2013/5/3 Hadrian Zbarcea <hzbar...@gmail.com> >> > > >> > >> Bengt, many thanks for reporting this. >> > >> >> > >> Either svn or git tells you pretty quickly how that code got there >> (git >> > >> blame). Do you mind raising a jira for this embarrassing bug? If you >> > want >> > >> to contribute a patch it'd be highly appreciated. That aside, I'll >> look >> > >> into it in the afternoon. I'll need to check if that piece of code was >> > >> meant to address another usecase or was an oversight and insufficient >> > >> testing. >> > >> >> > >> Cheers, >> > >> Hadrian >> > >> >> > >> >> > >> >> > >> On 05/03/2013 10:35 AM, Bengt Rodehav wrote: >> > >> >> > >>> Unfortunately I seem to have found another bug in Camel 2.11.0 >> > regarding >> > >>> sftp. I noticed it when I removed the "stepwise=false" argument from >> my >> > >>> routes thus enabling the default stepwise way of changing directory. >> > >>> >> > >>> The problematic section begins at line 404 in SftpOperations.java: >> > >>> >> > >>> *404:* if (getCurrentDirectory().**startsWith(path)) { >> > >>> *405:* // use relative path >> > >>> *406:* String p = getCurrentDirectory().** >> > >>> substring(path.length()); >> > >>> *407:* if (p.length() == 0) { >> > >>> *408:* return; >> > >>> *409:* } >> > >>> *410:* // the first character must be '/' and hence >> removed >> > >>> *411:* path = >> > >>> UP_DIR_PATTERN.matcher(p).**replaceAll("/..").substring(1)**; >> > >>> *412:* } >> > >>> >> > >>> >> > >>> >> > >>> The problem does not arise when stepping down into the directory to >> > poll >> > >>> but when going back to the directory where we started. Assume that >> the >> > >>> home >> > >>> directory in the sftp server is "/" and I want to poll the directory >> > "in" >> > >>> relative to the root. My endpoint would look something like this: >> > >>> >> > >>> sftp://user@server/in?**password=secret >> > >>> >> > >>> What happens is that the "i" in "in" is removed and Camel attempts to >> > >>> change to directory "n". Looking at the code above, the following >> > >>> happens: >> > >>> >> > >>> - The current directory is "/in" since we have previously succeeded >> in >> > >>> moving there and polling for files. We are now attempting to go back >> to >> > >>> where we started, therefore "path" is "/". >> > >>> - On line 406, the variable "p" will be set to "in", thus removing >> the >> > >>> leading "/". >> > >>> - On line 411 an incorrect assumption is made: It is assumed that the >> > >>> first >> > >>> character must be "/" but the leading "/" was removed on line 406. >> The >> > >>> result is therefore that "path" is set to "n" instead of "in". >> > >>> >> > >>> I haven't investigated when this error was introduced. I did however >> > >>> compare with the corresponding logic in FtpOperations.java. In that >> > file >> > >>> the section quoted above does not exist at all. It seems to me that >> the >> > >>> purpose with this code is to, stepwise, change directory up to ".." - >> > one >> > >>> directory at a time instead of going straight to "/". It seems very >> > >>> unnecessary to me but I assume there is a reason for it. Otherwise, >> the >> > >>> easiest change would be to just remove the code above and use the >> same >> > >>> logic as in FtpOperations.java. >> > >>> >> > >>> Currently my only workaround is to use "stepwise=false". >> > >>> >> > >>> /Bengt >> > >>> >> > >>> >> > > >> > >> -- Claus Ibsen ----------------- www.camelone.org: The open source integration conference. Red Hat, Inc. FuseSource is now part of Red Hat Email: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen