You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2014/03/24 17:15:39 UTC

git commit: Implementing user based pulling for slurm - AIRAVATA-1023

Repository: airavata
Updated Branches:
  refs/heads/master a052f5be8 -> 098992dc9


Implementing user based pulling for slurm - AIRAVATA-1023


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/098992dc
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/098992dc
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/098992dc

Branch: refs/heads/master
Commit: 098992dc9eb3b2abef80a2c18910bdd0ccf28b0c
Parents: a052f5b
Author: lahiru <la...@apache.org>
Authored: Mon Mar 24 12:15:33 2014 -0400
Committer: lahiru <la...@apache.org>
Committed: Mon Mar 24 12:15:33 2014 -0400

----------------------------------------------------------------------
 .../gsi/ssh/api/job/PBSOutputParser.java        |  2 --
 .../gsi/ssh/api/job/SlurmOutputParser.java      | 30 +++++++++++++++++++-
 .../monitor/impl/pull/qstat/QstatMonitor.java   |  9 ++++--
 3 files changed, 35 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/098992dc/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/PBSOutputParser.java
----------------------------------------------------------------------
diff --git a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/PBSOutputParser.java b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/PBSOutputParser.java
index d765ba5..f7516c7 100644
--- a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/PBSOutputParser.java
+++ b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/PBSOutputParser.java
@@ -159,7 +159,6 @@ public class PBSOutputParser implements OutputParser {
     public void parse(String userName, Map<String, JobStatus> statusMap, String rawOutput) {
         log.debug(rawOutput);
         String[] info = rawOutput.split("\n");
-
         int lastStop = 0;
         for (String jobID : statusMap.keySet()) {
             for(int i=lastStop;i<info.length;i++){
@@ -179,7 +178,6 @@ public class PBSOutputParser implements OutputParser {
                    break;
                }
             }
-
         }
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/098992dc/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/SlurmOutputParser.java
----------------------------------------------------------------------
diff --git a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/SlurmOutputParser.java b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/SlurmOutputParser.java
index 37d6d71..5738dd9 100644
--- a/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/SlurmOutputParser.java
+++ b/tools/gsissh/src/main/java/org/apache/airavata/gsi/ssh/api/job/SlurmOutputParser.java
@@ -26,6 +26,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.print.attribute.standard.JobState;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 public class SlurmOutputParser implements OutputParser {
@@ -146,6 +148,32 @@ public class SlurmOutputParser implements OutputParser {
     }
 
     public void parse(String userName, Map<String, JobStatus> statusMap, String rawOutput) throws SSHApiException {
-        //To change body of implemented methods use File | Settings | File Templates.
+        log.debug(rawOutput);
+        String[] info = rawOutput.split("\n");
+        String lastString = info[info.length -1];
+        if (lastString.contains("JOBID") || lastString.contains("PARTITION")) {
+            // There are no jobs for this username
+            return;
+        }
+        int lastStop = 0;
+        for (String jobID : statusMap.keySet()) {
+            for(int i=lastStop;i<info.length;i++){
+               if(info[i].contains(jobID)){
+                   // now starts processing this line
+                   log.info(info[i]);
+                   String correctLine = info[i];
+                   String[] columns = correctLine.split(" ");
+                   List<String> columnList = new ArrayList<String>();
+                   for (String s : columns) {
+                       if (!"".equals(s)) {
+                           columnList.add(s);
+                       }
+                   }
+                   lastStop = i+1;
+                   statusMap.put(jobID, JobStatus.valueOf(columnList.get(4)));
+                   break;
+               }
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/098992dc/tools/job-monitor/src/main/java/org/apache/airavata/job/monitor/impl/pull/qstat/QstatMonitor.java
----------------------------------------------------------------------
diff --git a/tools/job-monitor/src/main/java/org/apache/airavata/job/monitor/impl/pull/qstat/QstatMonitor.java b/tools/job-monitor/src/main/java/org/apache/airavata/job/monitor/impl/pull/qstat/QstatMonitor.java
index 8bb33bd..d4af60f 100644
--- a/tools/job-monitor/src/main/java/org/apache/airavata/job/monitor/impl/pull/qstat/QstatMonitor.java
+++ b/tools/job-monitor/src/main/java/org/apache/airavata/job/monitor/impl/pull/qstat/QstatMonitor.java
@@ -139,14 +139,17 @@ public class QstatMonitor extends PullMonitor {
                         iMonitorID.setLastMonitored(new Timestamp((new Date()).getTime()));
 
                         // After successful monitoring perform following actions to cleanup the queue, if necessary
-                        if (!jobStatus.getState().equals(JobState.COMPLETE)) {
+                        if (jobStatus.getState().equals(JobState.COMPLETE)) {
+                            completedJobs.add(iMonitorID);
+                        } else if (iMonitorID.getFailedCount() > 2 && iMonitorID.getStatus().equals(JobState.UNKNOWN)) {
+                            logger.error("Tried to monitor the job with ID " + iMonitorID.getJobID() + " But failed 3 times, so skip this Job from Monitor");
                             iMonitorID.setLastMonitored(new Timestamp((new Date()).getTime()));
-                        }else if(iMonitorID.getFailedCount() > 2 && iMonitorID.getStatus().equals(JobState.UNKNOWN)){
                             completedJobs.add(iMonitorID);
                         } else {
+                            // Everything is good but jjob is not yet completed, so we just change the last monitor
+                            iMonitorID.setLastMonitored(new Timestamp((new Date()).getTime()));
                             // if the job is complete we remove it from the Map, if any of these maps
                             // get empty this userMonitorData will get delete from the queue
-                            completedJobs.add(iMonitorID);
                         }
                     }
                 } else {