Skip to content

InterruptedByTimeoutException from UnixAsynchronousSocketChannelImpl on big files after around 10 minutes #764

Open
@baiglin

Description

@baiglin

Version

2.14.0

Bug description

Hi,

While sending files around 1.4 Gb to an sftp server:

Client string: 'SSH-2.0-APACHE-SSHD-2.14.0' vs. Server string: 'SSH-2.0-6.4.13.36 SSH Tectia Server'

We get all the time after around 10 minutes java.nio.channels.InterruptedByTimeoutException

Got a functional exception com.amadeus.dis.distribution.exception.DistributionFunctionalException: Problem in the SFTP upload of file '...' in directory '/xxxxxx': Unable to transmit file: xxxxxxx

	at com.amadeus.dis.distribution.process.sftp.SftpProfileClient.sendSource(SftpProfileClient.java:200) ~[common-process-3.30.38.jar!/:?]

	...
	at java.base/java.lang.Thread.run(Thread.java:829) [?:?]

Caused by: com.amadeus.dis.distribution.transfer.exception.TransferException: Unable to transmit file: AvlReport.D250613.T043149.output.jsonl.gz

	at com.amadeus.dis.distribution.transfer.sftp.sshd.SshdSftpClient.doWrite(SshdSftpClient.java:219) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.transfer.sftp.AbstractSftpClient.transferStream(AbstractSftpClient.java:80) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.transfer.sftp.SftpFallbackClient.transferStream(SftpFallbackClient.java:22) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.process.sftp.SftpProfileClient.sendSource(SftpProfileClient.java:194) ~[common-process-3.30.38.jar!/:?]

	... 17 more

Caused by: org.apache.sshd.common.SshException: IoWriteFutureImpl[SftpChannelSubsystem[id=1, recipient=1]-ClientSessionImpl[usertoto@/xx.xxx.xx:22][sftp][SSH_MSG_CHANNEL_DATA]]: Failed (InterruptedByTimeoutException) to execute: null

	at org.apache.sshd.common.future.AbstractSshFuture.lambda$verifyResult$2(AbstractSshFuture.java:146) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.future.AbstractSshFuture.formatExceptionMessage(AbstractSshFuture.java:206) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:145) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.io.AbstractIoWriteFuture.verify(AbstractIoWriteFuture.java:41) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.io.AbstractIoWriteFuture.verify(AbstractIoWriteFuture.java:32) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:110) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:96) ~[sshd-common-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.sftp.client.SftpMessage.waitUntilSent(SftpMessage.java:85) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.sftp.client.impl.SftpOutputStreamAsync.internalFlush(SftpOutputStreamAsync.java:358) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.sftp.client.impl.SftpOutputStreamAsync.internalTransfer(SftpOutputStreamAsync.java:285) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

	at org.apache.sshd.sftp.client.impl.SftpOutputStreamAsync.write(SftpOutputStreamAsync.java:180) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

	at java.base/java.io.InputStream.transferTo(InputStream.java:705) ~[?:?]

	at com.amadeus.dis.distribution.transfer.sftp.sshd.SshdSftpClient.doWrite(SshdSftpClient.java:215) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.transfer.sftp.AbstractSftpClient.transferStream(AbstractSftpClient.java:80) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.transfer.sftp.SftpFallbackClient.transferStream(SftpFallbackClient.java:22) ~[common-transfer-3.30.38.jar!/:?]

	at com.amadeus.dis.distribution.process.sftp.SftpProfileClient.sendSource(SftpProfileClient.java:194) ~[common-process-3.30.38.jar!/:?]

	... 17 more

	Suppressed: org.apache.sshd.common.SshException: Write attempt on closing session: SSH_MSG_CHANNEL_DATA

		at org.apache.sshd.common.future.AbstractSshFuture.verifyResult(AbstractSshFuture.java:141) ~[sshd-common-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.io.AbstractIoWriteFuture.verify(AbstractIoWriteFuture.java:41) ~[sshd-common-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.io.AbstractIoWriteFuture.verify(AbstractIoWriteFuture.java:32) ~[sshd-common-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:110) ~[sshd-common-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.future.VerifiableFuture.verify(VerifiableFuture.java:96) ~[sshd-common-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.SftpMessage.waitUntilSent(SftpMessage.java:85) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.DefaultSftpClient.send(DefaultSftpClient.java:273) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.AbstractSftpClient.rpc(AbstractSftpClient.java:167) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.AbstractSftpClient.checkCommandStatus(AbstractSftpClient.java:232) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.AbstractSftpClient.close(AbstractSftpClient.java:609) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.DefaultCloseableHandle.close(DefaultCloseableHandle.java:53) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.SftpOutputStreamAsync.close(SftpOutputStreamAsync.java:440) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at com.amadeus.dis.distribution.transfer.sftp.sshd.SshdSftpClient.doWrite(SshdSftpClient.java:213) ~[common-transfer-3.30.38.jar!/:?]

	...

		at java.base/java.lang.Thread.run(Thread.java:829) [?:?]

	Caused by: org.apache.sshd.common.SshException: Write attempt on closing session: SSH_MSG_CHANNEL_DATA

		at org.apache.sshd.common.session.helpers.KeyExchangeMessageHandler.writeOrEnqueue(KeyExchangeMessageHandler.java:300) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.session.helpers.KeyExchangeMessageHandler.writePacket(KeyExchangeMessageHandler.java:246) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.session.helpers.AbstractSession.writePacket(AbstractSession.java:1078) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.channel.AbstractChannel.writePacket(AbstractChannel.java:818) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.channel.throttle.DefaultChannelStreamWriter.writeData(DefaultChannelStreamWriter.java:46) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.channel.ChannelAsyncOutputStream.writePacket(ChannelAsyncOutputStream.java:348) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.channel.ChannelAsyncOutputStream.doWriteIfPossible(ChannelAsyncOutputStream.java:225) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.common.channel.ChannelAsyncOutputStream.writeBuffer(ChannelAsyncOutputStream.java:119) ~[sshd-core-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.DefaultSftpClient.write(DefaultSftpClient.java:308) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		at org.apache.sshd.sftp.client.impl.DefaultSftpClient.send(DefaultSftpClient.java:272) ~[sshd-sftp-2.14.0.jar!/:2.14.0]

		... 26 more


Caused by: java.nio.channels.InterruptedByTimeoutException

	at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl$2.run(UnixAsynchronousSocketChannelImpl.java:661) ~[?:?]

	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]

	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]

	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]

	... 3 more

I found from long ago https://issues.apache.org/jira/browse/SSHD-1020 that seems to be fixed for a long time now ...

And I am having hard time to undertand what is this timeout coming from and leading to the channel closing,

Actual behavior

Timeout after 10 minutes

Expected behavior

I do not see why any timeout should happen

Relevant log output

Areound the time of the issue I gathered the following logs from Mina

2025/06/13 08:51:03.236000 lgsap253-MUC disapp03 DDS_UDD#0-0 APP WARN <o.a.s.c.s.ClientSessionImpl#0 TID#00000> Multi1 [sshd-SshClient[5134a7d6]-nio2-thread-15] {} exceptionCaught(ClientSessionImpl[toto@/xx.xx.xxx.xxx:22])[state=Opened] InterruptedByTimeoutException: null
  
2025/06/13 08:51:03.237000 lgsap234-MUC disapp03 DDS_UDD#0-0 APP WARN <o.a.s.s.c.i.DefaultSftpClient$SftpChannelSubsystem$1#0 TID#00000> Multi1 [sshd-SshClient[5134a7d6]-nio2-thread-15] {} doCloseImmediately([SftpChannelSubsystem[id=1, recipient=1]-ClientSessionImpl[toto@/xxx.xxx.xxxx:22][sftp]] cmd=SSH_MSG_CHANNEL_DATA): still have 21 bytes of 21 on closing channel

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions