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);
}
});