From 350a98cd443038597784197888d664f7e0dca9f8 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 17 Oct 2022 20:51:13 +0200 Subject: [PATCH] Inline AsyncSshHandler.startSsh() There is just no reason to have this method split out, inline it to its sole user -- which is making interactions a bit clearer. We also see that there is a blocking call, holding up the caller until the connection succeeds. JIRA: NETCONF-905 Change-Id: Iae781a743e670498c9329162bb05a7475f32d370 Signed-off-by: Robert Varga --- .../handler/ssh/client/AsyncSshHandler.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java b/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java index 0d2f6e1aa5..325c7062b6 100644 --- a/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java +++ b/netconf/netconf-netty-util/src/main/java/org/opendaylight/netconf/nettyutil/handler/ssh/client/AsyncSshHandler.java @@ -102,20 +102,6 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter { negotiationFuture); } - private void startSsh(final ChannelHandlerContext ctx, final SocketAddress address) throws IOException { - LOG.debug("Starting SSH to {} on channel: {}", address, ctx.channel()); - - final ConnectFuture sshConnectionFuture = sshClient.connect(authenticationHandler.getUsername(), address) - .verify(ctx.channel().config().getConnectTimeoutMillis(), TimeUnit.MILLISECONDS); - sshConnectionFuture.addListener(future -> { - if (future.isConnected()) { - handleSshSessionCreated(future, ctx); - } else { - handleSshSetupFailure(ctx, future.getException()); - } - }); - } - private synchronized void handleSshSessionCreated(final ConnectFuture future, final ChannelHandlerContext ctx) { try { LOG.trace("SSH session created on channel: {}", ctx.channel()); @@ -188,7 +174,7 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter { @Override public synchronized void connect(final ChannelHandlerContext ctx, final SocketAddress remoteAddress, - final SocketAddress localAddress, final ChannelPromise promise) throws Exception { + final SocketAddress localAddress, final ChannelPromise promise) throws IOException { LOG.debug("SSH session connecting on channel {}. promise: {}", ctx.channel(), promise); connectPromise = requireNonNull(promise); @@ -201,7 +187,19 @@ public class AsyncSshHandler extends ChannelOutboundHandlerAdapter { //complete connection promise with netconf negotiation future negotiationFuture.addListener(negotiationFutureListener); } - startSsh(ctx, remoteAddress); + + LOG.debug("Starting SSH to {} on channel: {}", remoteAddress, ctx.channel()); + final ConnectFuture sshConnectionFuture = sshClient.connect(authenticationHandler.getUsername(), remoteAddress) + // FIXME: this is a blocking call, we should handle this with a concurrently-scheduled timeout. We do not + // have a Timer ready, so perhaps we should be using the event loop? + .verify(ctx.channel().config().getConnectTimeoutMillis(), TimeUnit.MILLISECONDS); + sshConnectionFuture.addListener(future -> { + if (future.isConnected()) { + handleSshSessionCreated(future, ctx); + } else { + handleSshSetupFailure(ctx, future.getException()); + } + }); } @Override -- 2.36.6