You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2020/01/06 21:10:18 UTC

[airavata] branch airavata-3287 updated: Avoiding deadlock when disconnecting sshj client

This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch airavata-3287
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/airavata-3287 by this push:
     new 8f09ec2  Avoiding deadlock when disconnecting sshj client
8f09ec2 is described below

commit 8f09ec2afbc71ee529bf718862f7169fc2b71dc8
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Mon Jan 6 16:10:05 2020 -0500

    Avoiding deadlock when disconnecting sshj client
---
 .../airavata/helix/adaptor/PoolingSSHJClient.java      | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/modules/airavata-helix/agent-impl/sshj-agent/src/main/java/org/apache/airavata/helix/adaptor/PoolingSSHJClient.java b/modules/airavata-helix/agent-impl/sshj-agent/src/main/java/org/apache/airavata/helix/adaptor/PoolingSSHJClient.java
index 05f37ac..d7caa29 100644
--- a/modules/airavata-helix/agent-impl/sshj-agent/src/main/java/org/apache/airavata/helix/adaptor/PoolingSSHJClient.java
+++ b/modules/airavata-helix/agent-impl/sshj-agent/src/main/java/org/apache/airavata/helix/adaptor/PoolingSSHJClient.java
@@ -165,7 +165,7 @@ public class PoolingSSHJClient extends SSHClient {
 
                         if (!sshClient.isConnected() || !sshClient.isAuthenticated() || !sshClient.isErrored()) {
                             logger.warn("Client for host {} is not connected or not authenticated. Creating a new client", host);
-                            removeDisconnectedClients(sshClient);
+                            removeDisconnectedClients(sshClient, true);
                             return newClientWithSessionValidation();
                         } else {
                             return sshClient;
@@ -181,14 +181,16 @@ public class PoolingSSHJClient extends SSHClient {
         }
     }
 
-    private void removeDisconnectedClients(SSHClientWrapper client) {
+    private void removeDisconnectedClients(SSHClientWrapper client, boolean doDisconnect) {
         lock.writeLock().lock();
 
-        try {
-            client.disconnect();
-        } catch (Exception e) {
-            log.warn("Errored while disconnecting the client " + e.getMessage());
-            // Ignore
+        if (doDisconnect) {
+            try {
+                client.disconnect();
+            } catch (Exception e) {
+                log.warn("Errored while disconnecting the client " + e.getMessage());
+                // Ignore
+            }
         }
 
         try {
@@ -255,7 +257,7 @@ public class PoolingSSHJClient extends SSHClient {
             @Override
             public void notifyDisconnect(DisconnectReason reason, String message) {
                 logger.warn("Connection disconnected " + message + " due to " + reason.name());
-                removeDisconnectedClients(sshClient);
+                removeDisconnectedClients(sshClient, false);
             }
         });