You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by he...@apache.org on 2013/03/09 03:07:32 UTC

svn commit: r1454640 - /airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java

Author: heshan
Date: Sat Mar  9 02:07:32 2013
New Revision: 1454640

URL: http://svn.apache.org/r1454640
Log:
AIRAVATA-202 Fixing a nightmaireish bug related to keys which prevented me from submitting jobs to EC2.

Modified:
    airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java

Modified: airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java?rev=1454640&r1=1454639&r2=1454640&view=diff
==============================================================================
--- airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java (original)
+++ airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/EC2Provider.java Sat Mar  9 02:07:32 2013
@@ -112,7 +112,7 @@ public class EC2Provider implements GFac
                 new BasicAWSCredentials(amazonSecurityContext.getAccessKey(), amazonSecurityContext.getSecretKey());
         AmazonEC2Client ec2client = new AmazonEC2Client(credential);
 
-        instance = initEc2Environment(jobExecutionContext, ec2client);
+        initEc2Environment(jobExecutionContext, ec2client);
         checkConnection(instance, ec2client);
     }
 
@@ -149,7 +149,7 @@ public class EC2Provider implements GFac
                 throw new GFacProviderException("The authentication succeeded but another"
                         + "authentication is required", jobExecutionContext);
             } else if(result==AuthenticationProtocolState.COMPLETE) {
-                throw new GFacProviderException("The authentication is complete", jobExecutionContext);
+                log.info("ssh client authentication is complete...");
             }
 
             SessionChannelClient session = sshClient.openSessionChannel();
@@ -170,6 +170,8 @@ public class EC2Provider implements GFac
             throw new GFacProviderException("Invalid SSH key", e);
         } catch (IOException e) {
             throw new GFacProviderException("Error in occurred during IO", e);
+        } catch (Exception e) {
+            throw new GFacProviderException("Error parsing standard out for job execution result", e);
         }
 
     }
@@ -213,16 +215,15 @@ public class EC2Provider implements GFac
      * @return instance id of the running Amazon instance.
      * @throws GFacProviderException
      */
-    private Instance initEc2Environment(JobExecutionContext jobExecutionContext, AmazonEC2Client ec2client)
+    private void initEc2Environment(JobExecutionContext jobExecutionContext, AmazonEC2Client ec2client)
             throws GFacProviderException {
-        Instance instance;
         try {
             /* Build key pair before start instance */
             buildKeyPair(ec2client);
 
             // right now, we can run it on one host
-            if (amazonSecurityContext.getInstanceId() != null)
-                instance = startInstances(ec2client, amazonSecurityContext.getInstanceId(),
+            if (amazonSecurityContext.getAmiId() != null)
+                instance = startInstances(ec2client, amazonSecurityContext.getAmiId(),
                         amazonSecurityContext.getInstanceType(), jobExecutionContext).get(0);
             else {
 
@@ -239,9 +240,10 @@ public class EC2Provider implements GFac
                 instance = describeInstancesResult.getReservations().get(0).getInstances().get(0);
 
                 // check instance keypair
-                if (instance.getKeyName() == null || !instance.getKeyName().equals(KEY_PAIR_NAME))
+                if (instance.getKeyName() == null || !instance.getKeyName().equals(KEY_PAIR_FILE)) {
                     throw new GFacProviderException("Keypair for instance:" + amazonSecurityContext.getInstanceId() +
                             " is not valid");
+                }
             }
 
             jobExecutionContext.getNotificationService().publish(new EC2ProviderEvent("EC2 Instance " + this.instance.getInstanceId() + " is running with public name " + this.instance.getPublicDnsName()));
@@ -249,14 +251,14 @@ public class EC2Provider implements GFac
         } catch (Exception e) {
             throw new GFacProviderException("Invalid Request",e,jobExecutionContext);
         }
-        return instance;
+
     }
 
     private List<Instance> startInstances(AmazonEC2Client ec2, String amiId, String insType, JobExecutionContext jobExecutionContext)
             throws AmazonServiceException {
         // start only 1 instance
         RunInstancesRequest request = new RunInstancesRequest(amiId, 1, 1);
-        request.setKeyName(KEY_PAIR_NAME);
+        request.setKeyName(KEY_PAIR_FILE);
         request.setInstanceType(insType);
 
         RunInstancesResult result = ec2.runInstances(request);
@@ -388,21 +390,21 @@ public class EC2Provider implements GFac
         try {
             /* Get current key pair in Amazon */
             DescribeKeyPairsRequest describeKeyPairsRequest = new DescribeKeyPairsRequest();
-            ec2.describeKeyPairs(describeKeyPairsRequest.withKeyNames(KEY_PAIR_NAME));
+            ec2.describeKeyPairs(describeKeyPairsRequest.withKeyNames(KEY_PAIR_FILE));
 
             /* If key exists and new key is created, delete old key and replace
              * with new one. Else, do nothing */
             if (newKey) {
-                DeleteKeyPairRequest deleteKeyPairRequest = new DeleteKeyPairRequest(KEY_PAIR_NAME);
+                DeleteKeyPairRequest deleteKeyPairRequest = new DeleteKeyPairRequest(KEY_PAIR_FILE);
                 ec2.deleteKeyPair(deleteKeyPairRequest);
-                ImportKeyPairRequest importKeyPairRequest = new ImportKeyPairRequest(KEY_PAIR_NAME, encodedPublicKey);
+                ImportKeyPairRequest importKeyPairRequest = new ImportKeyPairRequest(KEY_PAIR_FILE, encodedPublicKey);
                 ec2.importKeyPair(importKeyPairRequest);
             }
 
         } catch (AmazonServiceException ase) {
             /* Key doesn't exists, import new key. */
             if(ase.getErrorCode().equals("InvalidKeyPair.NotFound")){
-                ImportKeyPairRequest importKeyPairRequest = new ImportKeyPairRequest(KEY_PAIR_NAME, encodedPublicKey);
+                ImportKeyPairRequest importKeyPairRequest = new ImportKeyPairRequest(KEY_PAIR_FILE, encodedPublicKey);
                 ec2.importKeyPair(importKeyPairRequest);
             }else{
                 throw ase;