Hi Atsuhiko,

Thanks again for your reply.  I've verified every version after 0.1.44 and they 
all fail (lock up) after a substantial number of bytes.  The bulk requests 
setting does not resolve the issue.

                Channel c = session.openChannel("sftp");
                ((ChannelSftp)c).setBulkRequests(1);
                c.connect();

So going back to the differences between 0.1.44 and 0.1.49, the block of code 
that is causing the failure with ProFTPd is the following section from the 
_put(...) method in ChannelSftp:

        int foo = count;
        while (foo > 0) {
                if ((seq - 1) == startid
                        || ((seq - startid) - ackcount) >= bulk_requests) {
                        while (((seq - startid) - ackcount) >= bulk_requests) {
                                if (this.rwsize >= foo)
                                        break;
                                if (checkStatus(ackid, header)) {
                                        int _ackid = ackid[0];
                                        if (startid > _ackid || _ackid > seq - 
1) {
                                                if (_ackid == seq) {
                                                        System.err.println("ack 
error: startid="
                                                                + startid
                                                                + " seq="
                                                                + seq
                                                                + " _ackid=" + 
_ackid);
                                                }
                                                else {
                                                        throw new 
SftpException(SSH_FX_FAILURE,
                                                                "ack error: 
startid=" + startid
                                                                        + " 
seq=" + seq + " _ackid="
                                                                        + 
_ackid);
                                                }
                                        }
                                        ackcount++;
                                }
                                else {
                                        break;
                                }
                        }
                }
                foo -= sendWRITE(handle, offset, data, 0, foo);
        }

If I change this block of code back to what it was in 0.1.44 (below), then the 
transfers complete successfully.

        int _i = count;
        while (_i > 0) {
                _i -= sendWRITE(handle, offset, data, 0, _i);
                if ((seq - 1) == startid || io_in.available() >= 1024) {
                        while (io_in.available() > 0) {
                                if (checkStatus(ackid, header)) {
                                        _ackid = ackid[0];
                                        if (startid > _ackid || _ackid > seq - 
1) {
                                                if (_ackid == seq) {
                                                        System.err.println("ack 
error: startid="
                                                                + startid
                                                                + " seq="
                                                                + seq
                                                                + " _ackid=" + 
_ackid);
                                                }
                                                else {
                                                        throw new 
SftpException(SSH_FX_FAILURE,
                                                                "ack error: 
startid=" + startid
                                                                        + " 
seq=" + seq + " _ackid="
                                                                        + 
_ackid);
                                                }
                                        }
                                        ackcount++;
                                }
                                else {
                                        break;
                                }
                        }
                }
        }

What are your thoughts on reverting this back? And in doing so, what negative 
impacts would this present?

Regards,
Erick

-----Original Message-----
From: Atsuhiko Yamanaka [mailto:y...@jcraft.com] 
Sent: Thursday, October 10, 2013 1:59 AM
To: Erick Lichtas
Cc: jsch-users@lists.sourceforge.net
Subject: Re: [JSch-users] Issues uploading to ProFTPd with mod_sftp

Hi,

   +-From: Erick Lichtas <elich...@linoma.com> --
   |_Date: Thu, 3 Oct 2013 21:20:10 +0000 _______
   |

   |The latest versions of JSCH 0.1.49 and 0.1.50 are having issues
   |transferring larger files (I'm testing with ~400MB) to ProFTPD server,
   |however, the older version 0.1.44 that I've tested works (and has been
   |working just fine for quite some time.

How about version 0.1.47 and 0.1.48?
If 0.1.47 works fine, but 0.1.48 does not, try
  ((ChannelSftp)c).setBulkRequests(1)
before invoking Channel#connect().


Sincerely,
--
Atsuhiko Yamanaka
JCraft,Inc.
1-14-20 HONCHO AOBA-KU,
SENDAI, MIYAGI 980-0014 Japan.
Tel +81-22-723-2150
Skype callto://jcraft/
Twitter: http://twitter.com/ymnk
Facebook: http://facebook.com/aymnk



------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134071&iu=/4140/ostg.clktrk
_______________________________________________
JSch-users mailing list
JSch-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jsch-users

Reply via email to