You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2016/04/22 20:16:42 UTC
airavata git commit: Fixed concurrent issue with sessions
Repository: airavata
Updated Branches:
refs/heads/develop 4a1e79f46 -> 77a511829
Fixed concurrent issue with sessions
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/77a51182
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/77a51182
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/77a51182
Branch: refs/heads/develop
Commit: 77a511829a42171658bc095a165f5137bf35ae89
Parents: 4a1e79f
Author: Shameera Rathnayaka <sh...@gmail.com>
Authored: Fri Apr 22 14:14:44 2016 -0400
Committer: Shameera Rathnayaka <sh...@gmail.com>
Committed: Fri Apr 22 14:14:44 2016 -0400
----------------------------------------------------------------------
.../org/apache/airavata/gfac/impl/Factory.java | 2 +-
.../airavata/gfac/impl/GFacEngineImpl.java | 3 +-
.../airavata/gfac/impl/HPCRemoteCluster.java | 50 +++++++++++++++-----
3 files changed, 42 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/77a51182/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
index 9e1cbe5..fbeb1d8 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/Factory.java
@@ -455,7 +455,7 @@ public abstract class Factory {
return new CancelRequestWatcherImpl(experimentId, processId);
}
- public static Session getSSHSession(AuthenticationInfo authenticationInfo, ServerInfo serverInfo) throws AiravataException {
+ public static synchronized Session getSSHSession(AuthenticationInfo authenticationInfo, ServerInfo serverInfo) throws AiravataException {
SSHKeyAuthentication authentication = null;
String key = serverInfo.getUserName() + "_" + serverInfo.getHost() + "_" + serverInfo.getPort();
Session session = sessionMap.get(key);
http://git-wip-us.apache.org/repos/asf/airavata/blob/77a51182/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
index fbd8095..c0e2526 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/GFacEngineImpl.java
@@ -559,7 +559,8 @@ public class GFacEngineImpl implements GFacEngine {
errorModel.setUserFriendlyMessage("Error while executing " + task.getType() + " task" );
errorModel.setActualErrorMessage(errorMsg);
GFacUtils.saveTaskError(taskContext, errorModel);
- throw new GFacException("Error while executing " + task.getType() + " task");
+ throw new GFacException("Error: userFriendly msg :" + errorModel.getUserFriendlyMessage() + ", actual msg :"
+ + errorModel.getActualErrorMessage());
}
}
http://git-wip-us.apache.org/repos/asf/airavata/blob/77a51182/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/HPCRemoteCluster.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/HPCRemoteCluster.java b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/HPCRemoteCluster.java
index 677ba9b..468249e 100644
--- a/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/HPCRemoteCluster.java
+++ b/modules/gfac/gfac-impl/src/main/java/org/apache/airavata/gfac/impl/HPCRemoteCluster.java
@@ -47,6 +47,7 @@ import java.util.UUID;
*/
public class HPCRemoteCluster extends AbstractRemoteCluster{
private static final Logger log = LoggerFactory.getLogger(HPCRemoteCluster.class);
+ private static final int MAX_RETRY_COUNT = 3;
private final SSHKeyAuthentication authentication;
private final JSch jSch;
private Session session;
@@ -164,15 +165,28 @@ public class HPCRemoteCluster extends AbstractRemoteCluster{
@Override
public void scpThirdParty(String sourceFile, String destinationFile, Session clientSession, DIRECTION direction, boolean ignoreEmptyFile) throws SSHApiException {
+ int retryCount= 0;
try {
- session = Factory.getSSHSession(authenticationInfo, serverInfo);
- log.info("Transferring from:" + sourceFile + " To: " + destinationFile);
- if (direction == DIRECTION.TO) {
- SSHUtils.scpThirdParty(sourceFile, clientSession, destinationFile, session, ignoreEmptyFile);
- } else {
- SSHUtils.scpThirdParty(sourceFile, session, destinationFile, clientSession, ignoreEmptyFile);
- }
- } catch (IOException | AiravataException | JSchException e) {
+ while (retryCount < MAX_RETRY_COUNT) {
+ retryCount++;
+ session = Factory.getSSHSession(authenticationInfo, serverInfo);
+ log.info("Transferring from:" + sourceFile + " To: " + destinationFile);
+ try {
+ if (direction == DIRECTION.TO) {
+ SSHUtils.scpThirdParty(sourceFile, clientSession, destinationFile, session, ignoreEmptyFile);
+ } else {
+ SSHUtils.scpThirdParty(sourceFile, session, destinationFile, clientSession, ignoreEmptyFile);
+ }
+ } catch (JSchException e) {
+ if (retryCount == MAX_RETRY_COUNT) {
+ log.error("Retry count " + MAX_RETRY_COUNT + " exceeded for transferring from:"
+ + sourceFile + " To: " + destinationFile, e);
+ throw e;
+ }
+ log.error("Issue with jsch, Retry transferring from:" + sourceFile + " To: " + destinationFile, e);
+ }
+ }
+ } catch (IOException | AiravataException| JSchException e) {
throw new SSHApiException("Failed scp file:" + sourceFile + " to remote file "
+destinationFile , e);
}
@@ -180,10 +194,24 @@ public class HPCRemoteCluster extends AbstractRemoteCluster{
@Override
public void makeDirectory(String directoryPath) throws SSHApiException {
+ int retryCount = 0;
try {
- session = Factory.getSSHSession(authenticationInfo, serverInfo);
- log.info("Creating directory: " + serverInfo.getHost() + ":" + directoryPath);
- SSHUtils.makeDirectory(directoryPath, session);
+ while (retryCount < MAX_RETRY_COUNT) {
+ retryCount++;
+ session = Factory.getSSHSession(authenticationInfo, serverInfo);
+ log.info("Creating directory: " + serverInfo.getHost() + ":" + directoryPath);
+ try {
+ SSHUtils.makeDirectory(directoryPath, session);
+ } catch (JSchException e) {
+ if (retryCount == MAX_RETRY_COUNT) {
+ log.error("Retry count " + MAX_RETRY_COUNT + " exceeded for creating directory: "
+ + serverInfo.getHost() + ":" + directoryPath, e);
+
+ throw e;
+ }
+ log.error("Issue with jsch, Retry creating directory: " + serverInfo.getHost() + ":" + directoryPath);
+ }
+ }
} catch (JSchException | AiravataException | IOException e) {
throw new SSHApiException("Failed to create directory " + serverInfo.getHost() + ":" + directoryPath, e);
}