Salome HOME
Fix regression in Launcher with ForEach-like batch jobs
[modules/yacs.git] / src / Launcher / Launcher_Job.cxx
index b6744859c440f8405ab7e87987d2422d9187c0dd..5e1fc7ae2508bb1376d4757a1c305fee216913c9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2009-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2009-2013  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -53,6 +53,10 @@ Launcher::Job::Job()
   _queue = "";
   _job_type = "";
 
+  // Parameters for COORM
+  _launcher_file = "";
+  _launcher_args = "";
+
 #ifdef WITH_LIBBATCH
   _batch_job = new Batch::Job();
 #endif
@@ -149,6 +153,13 @@ Launcher::Job::getState()
   return _state;
 }
 
+// Get names or ids of hosts assigned to the job
+std::string
+Launcher::Job::getAssignedHostnames()
+{
+  return _assigned_hostnames;
+}
+
 void 
 Launcher::Job::setNumber(const int & number)
 {
@@ -270,6 +281,18 @@ Launcher::Job::setMaximumDuration(const std::string & maximum_duration)
   _maximum_duration = maximum_duration;
 }
 
+// For COORM
+void
+Launcher::Job::setLauncherFile(const std::string & launcher_file)
+{
+       _launcher_file = launcher_file;
+}
+void
+Launcher::Job::setLauncherArgs(const std::string & launcher_args)
+{
+       _launcher_args = launcher_args;
+}
+
 void 
 Launcher::Job::setResourceRequiredParams(const resourceParams & resource_required_params)
 {
@@ -319,6 +342,18 @@ Launcher::Job::getMaximumDuration()
   return _maximum_duration;
 }
 
+// For COORM
+std::string
+Launcher::Job::getLauncherFile()
+{
+       return _launcher_file;
+}
+std::string
+Launcher::Job::getLauncherArgs()
+{
+       return _launcher_args;
+}
+
 resourceParams 
 Launcher::Job::getResourceRequiredParams()
 {
@@ -434,6 +469,8 @@ Launcher::Job::updateJobState()
       Batch::JobInfo job_info = _batch_job_id.queryJob();
       Batch::Parametre par = job_info.getParametre();
       _state = par[Batch::STATE].str();
+      _assigned_hostnames = (par.find(Batch::ASSIGNEDHOSTNAMES) == par.end())?
+                            "" : par[Batch::ASSIGNEDHOSTNAMES].str();
       LAUNCHER_MESSAGE("State received is: " << par[Batch::STATE].str());
     }
 #endif
@@ -476,6 +513,10 @@ Launcher::Job::common_job_params()
   }
   params[Batch::WORKDIR] = _work_directory;
 
+  // Parameters for COORM
+  params[Batch::LAUNCHER_FILE] = _launcher_file;
+  params[Batch::LAUNCHER_ARGS] = _launcher_args;
+
   // If result_directory is not defined, we use HOME environnement
   if (_result_directory == "")
     _result_directory = getenv("HOME");
@@ -571,6 +612,9 @@ Launcher::Job::addToXmlDocument(xmlNodePtr root_node)
   xmlNewChild(node, NULL, xmlCharStrdup("local_directory"),  xmlCharStrdup(getLocalDirectory().c_str()));
   xmlNewChild(node, NULL, xmlCharStrdup("result_directory"), xmlCharStrdup(getResultDirectory().c_str()));
 
+  // Parameters for COORM
+  xmlNewChild(node, NULL, xmlCharStrdup("launcher_file"), xmlCharStrdup(getLauncherFile().c_str()));
+
   // Files
   xmlNodePtr files_node = xmlNewChild(node, NULL, xmlCharStrdup("files"), NULL);
   std::list<std::string> in_files  = get_in_files();
@@ -605,6 +649,9 @@ Launcher::Job::addToXmlDocument(xmlNodePtr root_node)
   xmlNewChild(node, NULL, xmlCharStrdup("maximum_duration"), xmlCharStrdup(getMaximumDuration().c_str()));
   xmlNewChild(node, NULL, xmlCharStrdup("queue"),            xmlCharStrdup(getQueue().c_str()));
 
+  // For COORM
+  xmlNewChild(node, NULL, xmlCharStrdup("launcher_args"), xmlCharStrdup(getLauncherArgs().c_str()));
+
   // Specific parameters part
   xmlNodePtr specific_parameters_node = xmlNewChild(node, NULL, xmlCharStrdup("specific_parameters"), NULL);
   std::map<std::string, std::string> specific_parameters = getSpecificParameters();