]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
- EnvFile for all type of jobs
authorribes <ribes>
Wed, 18 Nov 2009 15:14:55 +0000 (15:14 +0000)
committerribes <ribes>
Wed, 18 Nov 2009 15:14:55 +0000 (15:14 +0000)
- Job number counter is now thread safe

src/Launcher/Launcher.cxx
src/Launcher/Launcher.hxx
src/Launcher/Launcher_Job.cxx
src/Launcher/Launcher_Job.hxx
src/Launcher/Launcher_Job_Command.cxx
src/Launcher/Launcher_Job_Command.hxx
src/Launcher/Launcher_Job_YACSFile.cxx
src/Launcher/SALOME_Launcher.cxx
src/Launcher/SALOME_Launcher.hxx

index 28c274115dfc12020078adbda393077134dd0e0b..729147f76de27e7dce0ce165d8ffb1953a7ae2de 100644 (file)
@@ -52,6 +52,9 @@ Launcher_cpp::Launcher_cpp()
 #if defined(_DEBUG_) || defined(_DEBUG)
   cerr << "Launcher_cpp constructor" << endl;
 #endif
+  _job_cpt = 0;
+  _job_cpt_mutex = new pthread_mutex_t();
+  pthread_mutex_init(_job_cpt_mutex, NULL);
 }
 
 //=============================================================================
@@ -75,6 +78,8 @@ Launcher_cpp::~Launcher_cpp()
   for(it_job = _launcher_job_map.begin(); it_job != _launcher_job_map.end(); it_job++)
     delete it_job->second;
 #endif
+  pthread_mutex_destroy(_job_cpt_mutex);
+  delete _job_cpt_mutex;
 }
 
 //=============================================================================
@@ -1062,7 +1067,12 @@ Launcher_cpp::createJob(Launcher::Job * new_job)
     }
   }
 
+
   // Final step - add job to the jobs map
+  pthread_mutex_lock(_job_cpt_mutex);
+  new_job->setNumber(_job_cpt);
+  _job_cpt++;
+  pthread_mutex_unlock(_job_cpt_mutex);
   std::map<int, Launcher::Job *>::const_iterator it_job = _launcher_job_map.find(new_job->getNumber());
   if (it_job == _launcher_job_map.end())
     _launcher_job_map[new_job->getNumber()] = new_job;
index 91b110939a32dcc185f9e239645fba83bb97ffc8..916b71cf5b3a44b0321b1447b7faccc811458cb0 100644 (file)
@@ -33,6 +33,8 @@
 #include <string>
 #include <vector>
 
+#include <pthread.h>
+
 class MpiImpl;
 
 namespace Batch{
@@ -101,6 +103,8 @@ protected:
   //! will contain the informations on the data type catalog(after parsing)
   ParserLauncherType _launch;
 
+  int _job_cpt; // job number counter
+  pthread_mutex_t * _job_cpt_mutex; // mutex for job counter
 };
 
 #endif
index ae96a88f56e26a2d962d355ecb1167b09a2cbd05..9edbb2f4a273602d429a0bfa6926a862fe5af0ff 100644 (file)
@@ -27,6 +27,7 @@ Launcher::Job::Job()
   _state = "CREATED";
   _launch_date = getLaunchDate();
 
+  _env_file = "";
   _work_directory = "";
   _local_directory = "";
   _result_directory = "";
@@ -112,6 +113,18 @@ Launcher::Job::getMachineDefinition()
   return _machine_definition;
 }
 
+void 
+Launcher::Job::setEnvFile(std::string & env_file)
+{
+  _env_file = env_file;
+}
+
+std::string
+Launcher::Job::getEnvFile()
+{
+  return _env_file;
+}
+
 void 
 Launcher::Job::setWorkDirectory(const std::string & work_directory)
 {
@@ -378,6 +391,10 @@ Launcher::Job::common_job_params()
   if (_result_directory == "")
     _result_directory = getenv("HOME");
 
+  //Env file
+  if (_env_file != "")
+    add_in_file(_env_file);
+
   // _in_files
   for(std::list<std::string>::iterator it = _in_files.begin(); it != _in_files.end(); it++)
   {
index 5c74b1a21172d5e634317f1a7bcd352f25ac801d..8405e0edbade36eee401372eaeb1af2399e58f2e 100644 (file)
@@ -69,6 +69,7 @@ namespace Launcher
       void setMaximumDuration(const std::string & maximum_duration);
       void setMachineRequiredParams(const machineParams & machine_required_params);
       void setQueue(const std::string & queue);
+      void setEnvFile(std::string & env_file);
 
       std::string getWorkDirectory();
       std::string getLocalDirectory();
@@ -78,6 +79,7 @@ namespace Launcher
       std::string getMaximumDuration();
       machineParams getMachineRequiredParams();
       std::string getQueue();
+      std::string getEnvFile();
       
       std::string updateJobState();
 
@@ -97,6 +99,7 @@ namespace Launcher
 
       std::string _state;
       std::string _launch_date;
+      std::string _env_file;
 
       ParserResourcesType _machine_definition;
 
index aa8d928115f2b0a5aafb9be5758820dbe2898d9d..2711fcf4c3569b4148b55ee45cd98cacdba18ab9 100644 (file)
@@ -23,7 +23,6 @@
 Launcher::Job_Command::Job_Command(const std::string & command)
 {
   _command = command;
-  _env_file = "";
 }
 
 Launcher::Job_Command::~Job_Command() {}
@@ -40,18 +39,6 @@ Launcher::Job_Command::getCommand()
   return _command;
 }
 
-void 
-Launcher::Job_Command::setEnvFile(std::string & env_file)
-{
-  _env_file = env_file;
-}
-
-std::string
-Launcher::Job_Command::getEnvFile()
-{
-  return _env_file;
-}
-
 void
 Launcher::Job_Command::update_job()
 {
@@ -72,18 +59,6 @@ Launcher::Job_Command::update_job()
   std::string remote_file = _work_directory + "/" + _command.substr(found+1);
   params[INFILE] += Batch::Couple(local_file, remote_file);
 
-  // Copy env file
-  if (_env_file != "")
-  {
-    if (_env_file.substr(0, 1) == std::string("/"))
-      local_file = _env_file;
-    else
-      local_file = _local_directory + "/" + _env_file;
-    found = _env_file.find_last_of("/");
-    remote_file = _work_directory + "/" + _env_file.substr(found+1);
-    params[INFILE] += Batch::Couple(local_file, remote_file);
-  }
-
   params[EXECUTABLE] = buildCommandScript(params, _launch_date);
   _batch_job->setParametre(params);
 #endif
index 9a7a8cb80a157c89c74c1b2a407ad35fabdba37a..5171d49094fd318cb2bfb2e4c8e49f79adcdea17 100644 (file)
@@ -39,8 +39,6 @@ namespace Launcher
       // Specific parameters
       void setCommand(const std::string & command);
       std::string getCommand();
-      void setEnvFile(std::string & env_file);
-      std::string getEnvFile();
 
       virtual void update_job();
 
@@ -51,7 +49,6 @@ namespace Launcher
 
     private:
       std::string _command;
-      std::string _env_file;
   };
 }
 
index 3150c03422b3faf23d8884bec0930ac4b4f50558..6f2366567b918f3b0aed4a09445c8f63ba578c51 100644 (file)
@@ -100,6 +100,11 @@ Launcher::Job_YACSFile::buildSalomeCouplingScript(Batch::Parametre params)
   // Begin of script
   launch_script_stream << "#! /bin/sh -f" << std::endl;
   launch_script_stream << "cd " << work_directory << std::endl;
+  if (_env_file != "")
+  {
+    std::string::size_type last = _env_file.find_last_of("/");
+    launch_script_stream << "source ./" << _env_file.substr(last+1) << std::endl;
+  }
   launch_script_stream << "export SALOME_TMP_DIR=" << work_directory << "/logs" << std::endl;
 
   // -- Generates Catalog Resources
index 3b5a30bf6d842ac17320ad0ab0df358ba6fcced6..b6331bd0db6bdaaf274b6cf5f77b06e585d1d134 100644 (file)
@@ -68,7 +68,6 @@ SALOME_Launcher::SALOME_Launcher(CORBA::ORB_ptr orb, PortableServer::POA_var poa
 
   _NS->Register(refContMan,_LauncherNameInNS);
 
-  _job_cpt = 0;
   MESSAGE("SALOME_Launcher constructor end");
 }
 
@@ -214,9 +213,6 @@ SALOME_Launcher::createJob(const Engines::JobParameters & job_parameters)
     }
     Launcher::Job_Command * job = new Launcher::Job_Command(command);
     new_job = job;
-
-    std::string env_file = job_parameters.env_file.in();
-    job->setEnvFile(env_file);
   }
   else if (job_type == "yacs_file")
   {
@@ -228,11 +224,6 @@ SALOME_Launcher::createJob(const Engines::JobParameters & job_parameters)
     }
     new_job = new Launcher::Job_YACSFile(yacs_file);
   }
-
-  // Not thread safe... TODO !
-  new_job->setNumber(_job_cpt);
-  _job_cpt++;
-  // End Not thread safe
  
   // Directories
   std::string work_directory = job_parameters.work_directory.in();
@@ -243,6 +234,8 @@ SALOME_Launcher::createJob(const Engines::JobParameters & job_parameters)
   new_job->setResultDirectory(result_directory);
 
   // Files
+  std::string env_file = job_parameters.env_file.in();
+  new_job->setEnvFile(env_file);
   for (CORBA::ULong i = 0; i < job_parameters.in_files.length(); i++)
     new_job->add_in_file(job_parameters.in_files[i].in());
   for (CORBA::ULong i = 0; i < job_parameters.out_files.length(); i++)
index b574b1681b73de5d6992fd93d3056cc830fa17db..8f463a9f9ae545e6cdd71d0d72045cee8cf76116 100644 (file)
@@ -80,8 +80,6 @@ protected:
   SALOME_ResourcesManager *_ResManager;
   SALOME_NamingService *_NS;
 
-  int _job_cpt;
-
   Launcher_cpp _l;
 };