]> SALOME platform Git repositories - tools/libbatch.git/commitdiff
Salome HOME
Fix bug with long finished jobs on LSF V1_3_BR V1_3_1 V1_3_1rc2
authorbarate <barate>
Wed, 13 Jul 2011 09:05:46 +0000 (09:05 +0000)
committerbarate <barate>
Wed, 13 Jul 2011 09:05:46 +0000 (09:05 +0000)
src/LSF/Batch_JobInfo_eLSF.cxx

index e21056444df41cee93cd24a37f30474a710da2b9..349c5750e867de83966389bc05163b19cd96c556 100644 (file)
@@ -56,40 +56,46 @@ namespace Batch {
     _param[ID] = oss.str();
 
     // read status of job in log file
-    char line[128];
-    ifstream fp(logFile.c_str(),ios::in);
-    fp.getline(line,80,'\n');
-    
-    string sjobid, username, status;
-    fp >> sjobid;
-    fp >> username;
-    fp >> status;
-
-    if (status == "PEND") {         // Pending
-      _param[STATE] = QUEUED;
-    } else if (status == "PSUSP") { // Suspended while pending
-      _param[STATE] = PAUSED;
-    } else if (status == "RUN") {   // Running
-      _param[STATE] = RUNNING;
-    } else if (status == "USUSP") { // Suspended while running
-      _param[STATE] = PAUSED;
-    } else if (status == "SSUSP") { // Suspended by LSF
-      _param[STATE] = PAUSED;
-    } else if (status == "DONE") {  // Finished successfully
+    string line;
+    ifstream fp(logFile.c_str());
+    getline(fp, line);
+
+    // On some batch managers, the job is deleted soon after it is finished,
+    // so we have to consider that an unknown job (empty file) is a finished
+    // one, even if it is not always true.
+    if (fp.eof()) {
       _param[STATE] = FINISHED;
-    } else if (status == "EXIT") {  // Finished in error
-      _param[STATE] = FAILED;
-    } else if (status == "UNKWN") { // Lost contact
-      _param[STATE] = FAILED;
-    } else if (status == "ZOMBI") { // Zombie
-      _param[STATE] = FAILED;
     } else {
-      cerr << "Unknown job state code: " << status << endl;
+      string sjobid, username, status;
+      fp >> sjobid;
+      fp >> username;
+      fp >> status;
+
+      if (status == "PEND") {         // Pending
+        _param[STATE] = QUEUED;
+      } else if (status == "PSUSP") { // Suspended while pending
+        _param[STATE] = PAUSED;
+      } else if (status == "RUN") {   // Running
+        _param[STATE] = RUNNING;
+      } else if (status == "USUSP") { // Suspended while running
+        _param[STATE] = PAUSED;
+      } else if (status == "SSUSP") { // Suspended by LSF
+        _param[STATE] = PAUSED;
+      } else if (status == "DONE") {  // Finished successfully
+        _param[STATE] = FINISHED;
+      } else if (status == "EXIT") {  // Finished in error
+        _param[STATE] = FAILED;
+      } else if (status == "UNKWN") { // Lost contact
+        _param[STATE] = FAILED;
+      } else if (status == "ZOMBI") { // Zombie
+        _param[STATE] = FAILED;
+      } else {
+        cerr << "Unknown job state code: " << status << endl;
+      }
+
+      if( status.find("RUN") != string::npos)
+        _running = true;
     }
-
-    if( status.find("RUN") != string::npos)
-      _running = true;
-
   }
 
   // Teste si un job est present en machine