[ 
https://issues.apache.org/jira/browse/SSHD-1078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17197061#comment-17197061
 ] 

min yun law commented on SSHD-1078:
-----------------------------------

{code:java}
 I think you should be able to share a session and create multiple channels, 
provided that one channel is used by a single thread{code}
 

As I described for this bug, if the shared session is being used for big file 
upload( size > 4G), the channel by SCP/SFTP will break or get stuck.

in our environment, there are two threads that share the same session to a 
remote node. one thread (A) for file uploading, one thread (B) implements the 
remote lock checking loop which make sure only A is the JVM that was doing the 
file uploading, not other JVM.  When using Mina SSHD, execute channel for B 
will get stuck after few remote command calls, and scp/sftp channel for A get 
closed in the middle of file uploading.

Jsch work without any problem in above two thread.

> SCP/SFTP failed for big file upload
> -----------------------------------
>
>                 Key: SSHD-1078
>                 URL: https://issues.apache.org/jira/browse/SSHD-1078
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 2.5.1
>            Reporter: min yun law
>            Priority: Major
>
> Trying to merge product from jsch to mina sshd that keep the same SSH 
> architecture (lets call SessionPool) which for each remote node, there is 
> only one session object and limited channels (<=8) for executing commands and 
> file operations. The SessionPool  manages the session/channels for nodes  and 
> make sure only 8 threads(ssh channels) per node that can be run concurrently. 
> This architecture works for Jsch for many years, but when using mina sshd, 
> this architecture wont work when  with upload big file, we always see 
> following exception:
> {code:java}
> java.io.EOFException: Channel is being closed
> at 
> org.apache.sshd.common.channel.AbstractChannel$2.<init>(AbstractChannel.java:794)
> at 
> org.apache.sshd.common.channel.AbstractChannel.writePacket(AbstractChannel.java:792)
> at 
> org.apache.sshd.common.channel.ChannelAsyncOutputStream.doWriteIfPossible(ChannelAsyncOutputStream.java:168)
> at 
> org.apache.sshd.common.channel.ChannelAsyncOutputStream.writePacket(ChannelAsyncOutputStream.java:70)
> at 
> org.apache.sshd.client.subsystem.sftp.impl.DefaultSftpClient.send(DefaultSftpClient.java:292)
> at 
> org.apache.sshd.client.subsystem.sftp.impl.SftpOutputStreamAsync.flush(SftpOutputStreamAsync.java:210)
> at 
> org.apache.sshd.client.subsystem.sftp.impl.SftpOutputStreamAsync.write(SftpOutputStreamAsync.java:141)
> {code}
> From SSH server log, we see follow error:
> {code:java}
> Aug 19 15:56:38 xxxx sftp-server[202217]: error: Unknown message 0
> Aug 19 15:56:38 xxxx sftp-server[202217]: error: msg_len 0 < consumed 1
> {code}
> other client side exceptions by mina sshd as:
> org.apache.sshd.common.channel.WindowClosedException: Already closed: 
> Window[client/remote](ChannelExec[id=79, recipient=1]-ClientSessionImp
>  
> ----
> After many tries, finally I found that for big file upload/download, I have 
> to give its own SshClient/ClientSession objects and then there will  no such 
> channel closing exception during file upload.  
> That means we cannot share the same SshClient and ClientSession object per 
> remote node to execute commands and file operations, and there may has bug in 
> ClientSession when handle channels in this situation.
> the reason that we like to share the same SshClient/ClientSession for the 
> same remote node is to manage the session/channels and close them when no 
> usage, also to reduce the cost to allocate those objects. 
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org
For additional commands, e-mail: dev-h...@mina.apache.org

Reply via email to