Salome HOME
22261: EDF 2698 SMESH: Memory leak when displaying 2D quadratic elements as arcs
[modules/kernel.git] / src / Launcher / Launcher.cxx
index 62bfe647bfbcf7a1941b03d091ecda1bfa79a30a..8471b2265615a38f3bfab27aae4bcfbf77875648 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 
 #ifdef WITH_LIBBATCH
-#include <Batch/Batch_Date.hxx>
-#include <Batch/Batch_BatchManagerCatalog.hxx>
-#include <Batch/Batch_FactBatchManager_eClient.hxx>
-#include <Batch/Batch_BatchManager_eClient.hxx>
+#include <libbatch/BatchManagerCatalog.hxx>
+#include <libbatch/FactBatchManager.hxx>
+#include <libbatch/BatchManager.hxx>
 #endif
 
 #include "Basics_Utils.hxx"
@@ -65,7 +64,7 @@ Launcher_cpp::~Launcher_cpp()
   std::map<int, Launcher::Job *>::const_iterator it_job;
   for(it_job = _launcher_job_map.begin(); it_job != _launcher_job_map.end(); it_job++)
     delete it_job->second;
-  std::map <int, Batch::BatchManager_eClient * >::const_iterator it1;
+  std::map <int, Batch::BatchManager * >::const_iterator it1;
   for(it1=_batchmap.begin();it1!=_batchmap.end();it1++)
     delete it1->second;
 #endif
@@ -131,7 +130,7 @@ Launcher_cpp::launchJob(int job_id)
 
   // Third step search batch manager for the job into the map -> instanciate one if does not exist
 #ifdef WITH_LIBBATCH
-  std::map<int, Batch::BatchManager_eClient *>::const_iterator it = _batchmap.find(job_id);
+  std::map<int, Batch::BatchManager *>::const_iterator it = _batchmap.find(job_id);
   if(it == _batchmap.end())
   {
     createBatchManagerForJob(job);
@@ -143,7 +142,7 @@ Launcher_cpp::launchJob(int job_id)
     job->setBatchManagerJobId(batch_manager_job_id);
     job->setState("QUEUED");
   }
-  catch(const Batch::EmulationException &ex)
+  catch(const Batch::GenericException &ex)
   {
     LAUNCHER_INFOS("Job is not launched, exception in submitJob: " << ex.message);
     throw LauncherException(ex.message.c_str());
@@ -176,18 +175,37 @@ Launcher_cpp::getJobState(int job_id)
   {
     state = job->updateJobState();
   }
-  catch(const Batch::EmulationException &ex)
+  catch(const Batch::GenericException &ex)
   {
     LAUNCHER_INFOS("getJobState failed, exception: " << ex.message);
     throw LauncherException(ex.message.c_str());
   }
-  catch(const Batch::RunTimeException &ex)
+
+  return state.c_str();
+}
+
+//=============================================================================
+/*!
+ * Get job assigned hostnames
+ */
+//=============================================================================
+const char *
+Launcher_cpp::getAssignedHostnames(int job_id)
+{
+  LAUNCHER_MESSAGE("Get job assigned hostnames");
+
+  // Check if job exist
+  std::map<int, Launcher::Job *>::const_iterator it_job = _launcher_job_map.find(job_id);
+  if (it_job == _launcher_job_map.end())
   {
-    LAUNCHER_INFOS("getJobState failed, exception: " << ex.message);
-    throw LauncherException(ex.message.c_str());
+    LAUNCHER_INFOS("Cannot find the job, is it created ? job number: " << job_id);
+    throw LauncherException("Cannot find the job, is it created ?");
   }
 
-  return state.c_str();
+  Launcher::Job * job = it_job->second;
+  std::string assigned_hostnames = job->getAssignedHostnames();
+
+  return assigned_hostnames.c_str();
 }
 
 //=============================================================================
@@ -217,7 +235,7 @@ Launcher_cpp::getJobResults(int job_id, std::string directory)
     else
       _batchmap[job_id]->importOutputFiles(*(job->getBatchJob()), job->getResultDirectory());
   }
-  catch(const Batch::EmulationException &ex)
+  catch(const Batch::GenericException &ex)
   {
     LAUNCHER_INFOS("getJobResult is maybe incomplete, exception: " << ex.message);
     throw LauncherException(ex.message.c_str());
@@ -253,7 +271,7 @@ Launcher_cpp::getJobDumpState(int job_id, std::string directory)
     else
       rtn = _batchmap[job_id]->importDumpStateFile(*(job->getBatchJob()), job->getResultDirectory());
   }
-  catch(const Batch::EmulationException &ex)
+  catch(const Batch::GenericException &ex)
   {
     LAUNCHER_INFOS("getJobResult is maybe incomplete, exception: " << ex.message);
     throw LauncherException(ex.message.c_str());
@@ -366,18 +384,20 @@ Launcher_cpp::createJobWithFile(const std::string xmlExecuteFile,
  *  Factory to instanciate the good batch manager for choosen cluster.
  */ 
 //=============================================================================
-Batch::BatchManager_eClient *
+Batch::BatchManager *
 Launcher_cpp::FactoryBatchManager(ParserResourcesType& params)
 {
   std::string mpi;
   Batch::CommunicationProtocolType protocol;
-  Batch::FactBatchManager_eClient* fact;
+  Batch::FactBatchManager * fact;
 
-  int nb_proc_per_node = params.DataForSort._nbOfProcPerNode;
   std::string hostname = params.HostName;
 
   switch(params.Protocol)
   {
+    case sh:
+      protocol = Batch::SH;
+      break;
     case rsh:
       protocol = Batch::RSH;
       break;
@@ -403,6 +423,9 @@ Launcher_cpp::FactoryBatchManager(ParserResourcesType& params)
     case openmpi:
       mpi = "openmpi";
       break;
+    case ompi:
+      mpi = "ompi";
+      break;
     case slurmmpi:
       mpi = "slurmmpi";
       break;
@@ -417,42 +440,48 @@ Launcher_cpp::FactoryBatchManager(ParserResourcesType& params)
   switch( params.Batch )
   {
     case pbs:
-      bmType = "ePBS";
+      bmType = "PBS";
       break;
     case lsf:
-      bmType = "eLSF";
+      bmType = "LSF";
       break;
     case sge:
-      bmType = "eSGE";
+      bmType = "SGE";
       break;
     case ccc:
-      bmType = "eCCC";
+      bmType = "CCC";
       break;
     case slurm:
-      bmType = "eSLURM";
+      bmType = "SLURM";
       break;
     case ssh_batch:
-      bmType = "eSSH";
+      bmType = "LOCAL";
       break;
     case ll:
-      bmType = "eLL";
+      bmType = "LL";
       break;
     case vishnu:
-      bmType = "eVISHNU";
+      bmType = "VISHNU";
+      break;
+    case oar:
+      bmType = "OAR";
+      break;
+    case coorm:
+      bmType = "COORM";
       break;
     default:
       LAUNCHER_MESSAGE("Bad batch description of the resource: Batch = " << params.Batch);
       throw LauncherException("No batchmanager for that cluster - Bad batch description of the resource");
   }
   Batch::BatchManagerCatalog & cata = Batch::BatchManagerCatalog::getInstance();
-  fact = dynamic_cast<Batch::FactBatchManager_eClient*>(cata(bmType));
+  fact = dynamic_cast<Batch::FactBatchManager*>(cata(bmType));
   if (fact == NULL) {
     LAUNCHER_MESSAGE("Cannot find batch manager factory for " << bmType << ". Check your version of libBatch.");
     throw LauncherException("Cannot find batch manager factory");
   }
   LAUNCHER_MESSAGE("Instanciation of batch manager of type: " << bmType);
-  Batch::BatchManager_eClient * batch_client = (*fact)(hostname.c_str(), params.UserName.c_str(),
-                                                       protocol, mpi.c_str(), nb_proc_per_node);
+  Batch::BatchManager * batch_client = (*fact)(hostname.c_str(), params.UserName.c_str(),
+                                               protocol, mpi.c_str());
   return batch_client;
 }
 
@@ -486,6 +515,14 @@ Launcher_cpp::getJobState(int job_id)
                           "(libBatch was not present at compilation time)");
 }
 
+const char *
+Launcher_cpp::getAssignedHostnames(int job_id)
+{
+  LAUNCHER_INFOS("Launcher compiled without LIBBATCH - cannot get job assigned hostnames!!!");
+  throw LauncherException("Method Launcher_cpp::getAssignedHostnames is not available "
+                          "(libBatch was not present at compilation time)");
+}
+
 void
 Launcher_cpp::getJobResults(int job_id, std::string directory)
 {
@@ -578,6 +615,8 @@ Launcher_cpp::createBatchManagerForJob(Launcher::Job * job)
   // Select a ressource for the job
   std::vector<std::string> ResourceList;
   resourceParams params = job->getResourceRequiredParams();
+  // Consider only resources that can launch batch jobs
+  params.can_launch_batch_jobs = true;
   try
   {
     ResourceList = _ResManager->GetFittingResources(params);
@@ -611,7 +650,7 @@ Launcher_cpp::createBatchManagerForJob(Launcher::Job * job)
 
   // Step 2: We can now add a Factory if the resource is correctly define
 #ifdef WITH_LIBBATCH
-  std::map<int, Batch::BatchManager_eClient *>::const_iterator it = _batchmap.find(job_id);
+  std::map<int, Batch::BatchManager *>::const_iterator it = _batchmap.find(job_id);
   if(it == _batchmap.end())
   {
     try
@@ -619,7 +658,7 @@ Launcher_cpp::createBatchManagerForJob(Launcher::Job * job)
       // Warning cannot write on one line like this, because map object is constructed before
       // the method is called...
       //_batchmap[job_id] = FactoryBatchManager(resource_definition);
-      Batch::BatchManager_eClient * batch_client = FactoryBatchManager(resource_definition);
+      Batch::BatchManager * batch_client = FactoryBatchManager(resource_definition);
       _batchmap[job_id] = batch_client;
     }
     catch(const LauncherException &ex)
@@ -627,12 +666,7 @@ Launcher_cpp::createBatchManagerForJob(Launcher::Job * job)
       LAUNCHER_INFOS("Error during creation of the batch manager of the job, mess: " << ex.msg);
       throw ex;
     }
-    catch(const Batch::EmulationException &ex)
-    {
-      LAUNCHER_INFOS("Error during creation of the batch manager of the job, mess: " << ex.message);
-      throw LauncherException(ex.message);
-    }
-    catch(const Batch::InvalidArgumentException &ex)
+    catch(const Batch::GenericException &ex)
     {
       LAUNCHER_INFOS("Error during creation of the batch manager of the job, mess: " << ex.message);
       throw LauncherException(ex.message);
@@ -662,7 +696,7 @@ Launcher_cpp::addJobDirectlyToMap(Launcher::Job * new_job, const std::string job
                                                                   job_reference);
     new_job->setBatchManagerJobId(batch_manager_job_id);
   }
-  catch(const Batch::EmulationException &ex)
+  catch(const Batch::GenericException &ex)
   {
     LAUNCHER_INFOS("Job cannot be added, exception in addJob: " << ex.message);
     throw LauncherException(ex.message.c_str());