Steve Jankowski created SSHD-1223:
-------------------------------------
Summary: MissingAttachedSessionException when starting concurrent
SshClient connections
Key: SSHD-1223
URL: https://issues.apache.org/jira/browse/SSHD-1223
Project: MINA SSHD
Issue Type: Bug
Affects Versions: 2.7.0
Environment: sshd 2.7.0
Spring boot 2.5.4
Java 11
Reporter: Steve Jankowski
When 10+ ssh clients are connecting concurrently, some of them fail with
MissingAttachedSessionException
{noformat}
org.apache.sshd.common.session.helpers.MissingAttachedSessionException: No
session attached to Nio2Session[local=/172.31.20.24:48754,
remote=/172.31.20.9:22]
at
org.apache.sshd.common.session.helpers.AbstractSession.getSession(AbstractSession.java:2443)
at
org.apache.sshd.common.session.helpers.AbstractSession.getSession(AbstractSession.java:2408)
at
org.apache.sshd.client.SshClient.onConnectOperationComplete(SshClient.java:739)
at org.apache.sshd.client.SshClient$1.operationComplete(SshClient.java:716)
at org.apache.sshd.client.SshClient$1.operationComplete(SshClient.java:697)
at
org.apache.sshd.common.future.AbstractSshFuture.notifyListener(AbstractSshFuture.java:159)
at
org.apache.sshd.common.future.DefaultSshFuture.notifyListeners(DefaultSshFuture.java:209)
at
org.apache.sshd.common.future.DefaultSshFuture.setValue(DefaultSshFuture.java:112)
at
org.apache.sshd.common.io.nio2.Nio2Connector$DefaultIoConnectFuture.setSession(Nio2Connector.java:233)
at
org.apache.sshd.common.io.nio2.Nio2Connector$ConnectionCompletionHandler.onCompleted(Nio2Connector.java:154)
at
org.apache.sshd.common.io.nio2.Nio2Connector$ConnectionCompletionHandler.onCompleted(Nio2Connector.java:116)
at
org.apache.sshd.common.io.nio2.Nio2CompletionHandler.lambda$completed$0(Nio2CompletionHandler.java:38)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at
org.apache.sshd.common.io.nio2.Nio2CompletionHandler.completed(Nio2CompletionHandler.java:37)
at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127)
at java.base/sun.nio.ch.Invoker$2.run(Invoker.java:219)
at
java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829) {noformat}
My code is roughly:
{noformat}
SshClient ssh = SshClient.setUpDefaultClient();
ssh.start();
// loop this 10 ish times
{
ConnectFuture future;
try {
future = ssh.connect(SSH_USER, ip, SSH_PORT);
future.addListener(new
SshFutureListener<ConnectFuture>() {
@Override
public void operationComplete(ConnectFuture
future) {
if (future.getException() != null) {
logger.error("connect failure",
future.getException());
}
}
});
} catch (IOException ex) {
logger.error("startCommand",ex);
return;
}
}
{noformat}
Some of the ssh connections fail. The ConnectFuture listener gets
MissingAttachedSessionException
This test case is highly suspicious: ClientDeadlockTest
{noformat}
@Test
public void testSimpleClient() throws Exception {
client.start();
ConnectFuture future = client.connect(getCurrentTestName(),
TEST_LOCALHOST, port);
try (ClientSession session =
future.verify(CONNECT_TIMEOUT).getSession()) {
Collection<ClientSessionEvent> events
=
session.waitFor(EnumSet.of(ClientSession.ClientSessionEvent.CLOSED),
TimeUnit.SECONDS.toMillis(7L));
assertTrue("Close event not signalled: " + events,
events.contains(ClientSession.ClientSessionEvent.CLOSED));
assertFalse("Session not marked as closed", session.isOpen());
} catch (SshException e) {
Throwable cause = e.getCause();
// Due to a race condition we might get this exception
if (!(cause instanceof MissingAttachedSessionException)) {
throw e;
}
}
}
{noformat}
The test case explicitly calls out a race condition, and ignores the exception.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]