]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Merge from mergeto_V5_1_main_19Jan10
authorribes <ribes>
Tue, 19 Jan 2010 10:06:47 +0000 (10:06 +0000)
committerribes <ribes>
Tue, 19 Jan 2010 10:06:47 +0000 (10:06 +0000)
idl/SALOME_ContainerManager.idl
src/Container/SALOME_ContainerManager.cxx
src/Container/SALOME_ContainerManager.hxx
src/Launcher/Launcher.cxx
src/Launcher/Makefile.am
src/ResourcesManager/SALOME_ResourcesCatalog_Handler.cxx
src/ResourcesManager/SALOME_ResourcesManager.cxx

index 1b48aa5af0b99d68bffb2dbf1fa95350a8962aea..66d51d569bf96e660c871a1092f4bf79c4bc5814 100644 (file)
@@ -40,6 +40,15 @@ typedef sequence<string> FilesList;
 //! modules list
 typedef sequence<string> ModulesList;
 
+//! A generic parameter
+struct Parameter
+{
+  string name;
+  string value;
+};
+//! Generic parameter list
+typedef sequence<Engines::Parameter> ParameterList;
+
 //! Type to describe required properties of a resource
 struct ResourceParameters
 {
@@ -166,6 +175,11 @@ struct JobParameters
     Name of the batch queue choosed - optional
   */
   string queue;
+
+  /*!
+    Specific parameters for each type of job - optional
+  */
+  Engines::ParameterList specific_parameters;
 };
 
 /*! \brief Interface of the %salomelauncher
index f59f7b814fd1f8655b7dd5a2b181cb5a794ad344..6358393a7039d19331ad22c20519b997ce2f9340 100644 (file)
@@ -203,6 +203,7 @@ void SALOME_ContainerManager::ShutdownContainers()
 Engines::Container_ptr
 SALOME_ContainerManager::GiveContainer(const Engines::ContainerParameters& params)
 {
+  string machFile;
   Engines::Container_ptr ret = Engines::Container::_nil();
 
   // Step 0: Default mode is start
@@ -292,9 +293,9 @@ SALOME_ContainerManager::GiveContainer(const Engines::ContainerParameters& param
     else
       nbproc = params.resource_params.nb_node * params.resource_params.nb_proc_per_node;
     if( getenv("LIBBATCH_NODEFILE") != NULL )
-      machinesFile(nbproc);
+      machFile = machinesFile(nbproc);
     // A mpi parallel container register on zero node in NS
-    containerNameInNS = _NS->BuildContainerNameForNS(params, GetMPIZeroNode(hostname).c_str());
+    containerNameInNS = _NS->BuildContainerNameForNS(params, GetMPIZeroNode(hostname,machFile).c_str());
   }
   else
     containerNameInNS = _NS->BuildContainerNameForNS(params, hostname.c_str());
@@ -312,7 +313,6 @@ SALOME_ContainerManager::GiveContainer(const Engines::ContainerParameters& param
       if(!cont->_non_existent())
       {
        if(std::string(params.mode.in())=="getorstart" or std::string(params.mode.in())=="get"){
-         _numInstanceMutex.unlock();
          return cont._retn(); /* the container exists and params.mode is getorstart or get use it*/
        }
        else
@@ -396,10 +396,10 @@ SALOME_ContainerManager::GiveContainer(const Engines::ContainerParameters& param
   std::string command;
   // if a parallel container is launched in batch job, command is: "mpirun -np nbproc -machinefile nodesfile SALOME_MPIContainer"
   if( getenv("LIBBATCH_NODEFILE") != NULL && params.isMPI )
-    command = BuildCommandToLaunchLocalContainer(params,container_exe);
+    command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe);
   // if a container is launched on localhost, command is "SALOME_Container" or "mpirun -np nbproc SALOME_MPIContainer"
   else if(hostname == Kernel_Utils::GetHostname())
-    command = BuildCommandToLaunchLocalContainer(params, container_exe);
+    command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe);
   // if a container is launched in remote mode, command is "ssh resource_selected SALOME_Container" or "ssh resource_selected mpirun -np nbproc SALOME_MPIContainer"
   else
     command = BuildCommandToLaunchRemoteContainer(resource_selected, params, container_exe);
@@ -679,7 +679,7 @@ SALOME_ContainerManager::BuildCommandToLaunchRemoteContainer
 //=============================================================================
 string
 SALOME_ContainerManager::BuildCommandToLaunchLocalContainer
-(const Engines::ContainerParameters& params, const std::string& container_exe)
+(const Engines::ContainerParameters& params, const std::string& machinesFile, const std::string& container_exe)
 {
   _TmpFileName = BuildTemporaryFileName();
   string command;
@@ -703,7 +703,7 @@ SALOME_ContainerManager::BuildCommandToLaunchLocalContainer
       o << nbproc << " ";
 
       if( getenv("LIBBATCH_NODEFILE") != NULL )
-       o << "-machinefile " << _machinesFile << " ";
+       o << "-machinefile " << machinesFile << " ";
 
 #ifdef WITHLAM
       o << "-x PATH,LD_LIBRARY_PATH,OMNIORB_CONFIG,SALOME_trace ";
@@ -1701,7 +1701,7 @@ SALOME_ContainerManager::BuildCommandToLaunchParallelContainer(const std::string
 }
 #endif
 
-string SALOME_ContainerManager::GetMPIZeroNode(string machine)
+string SALOME_ContainerManager::GetMPIZeroNode(const string machine, const string machinesFile)
 {
   int status;
   string zeronode;
@@ -1711,7 +1711,7 @@ string SALOME_ContainerManager::GetMPIZeroNode(string machine)
   if( getenv("LIBBATCH_NODEFILE") == NULL )
     cmd = "ssh " + machine + " mpirun -np 1 hostname > " + tmpFile;
   else
-    cmd = "mpirun -np 1 -machinefile " + _machinesFile + " hostname > " + tmpFile;
+    cmd = "mpirun -np 1 -machinefile " + machinesFile + " hostname > " + tmpFile;
 
   status = system(cmd.c_str());
   if( status == 0 ){
@@ -1724,13 +1724,15 @@ string SALOME_ContainerManager::GetMPIZeroNode(string machine)
   return zeronode;
 }
 
-void SALOME_ContainerManager::machinesFile(const int nbproc)
+string SALOME_ContainerManager::machinesFile(const int nbproc)
 {
   string tmp;
   string nodesFile = getenv("LIBBATCH_NODEFILE");
-  _machinesFile = Kernel_Utils::GetTmpFileName();
+  string machinesFile = Kernel_Utils::GetTmpFileName();
   ifstream fpi(nodesFile.c_str(),ios::in);
-  ofstream fpo(_machinesFile.c_str(),ios::out);
+  ofstream fpo(machinesFile.c_str(),ios::out);
+
+  _numInstanceMutex.lock();
 
   for(int i=0;i<_nbprocUsed;i++)
     fpi >> tmp;
@@ -1745,4 +1747,8 @@ void SALOME_ContainerManager::machinesFile(const int nbproc)
   fpi.close();
   fpo.close();
 
+  _numInstanceMutex.unlock();
+
+  return machinesFile;
+
 }
index 30c76ef8b6f95c183f73951a0b44c61a4a232b05..89fa303fab7103d8e52292dff84bcb6a990f0662 100644 (file)
@@ -71,6 +71,7 @@ protected:
                                                   const std::string& container_exe="SALOME_Container");
 
   std::string BuildCommandToLaunchLocalContainer(const Engines::ContainerParameters& params, 
+                                                const std::string& machinesFile,
                                                  const std::string& container_exe="SALOME_Container");
 
   std::string BuildTempFileToLaunchRemoteContainer(const std::string& resource_name,
@@ -86,7 +87,9 @@ protected:
 
   std::string BuildTemporaryFileName() const;
 
-  std::string GetMPIZeroNode(std::string machine);
+  std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile);
+
+  std::string machinesFile(const int nbproc);
 
   void machinesFile(const int nbproc);
 
@@ -120,9 +123,6 @@ protected:
   //! attribute that contains the number of processes used in batch mode by MPI containers
   int _nbprocUsed;
 
-  //! attributes that contains the machinefile for MPI containers
-  std::string _machinesFile;
-
   static omni_mutex _numInstanceMutex ; // lib and instance protection
 
 };
index 358b640ed317a5472840959b1d5a02efdafd20f6..01b224ead093cf3325fec05b515566b32492245a 100644 (file)
@@ -29,6 +29,8 @@
 #include <Batch/Batch_FactBatchManager_eSSH.hxx>
 #endif
 
+#include "Basics_Utils.hxx"
+#include "Basics_DirUtils.hxx"
 #include "SALOME_Launcher_Handler.hxx"
 #include "Launcher.hxx"
 #include "Launcher_Job_Command.hxx"
@@ -127,7 +129,11 @@ Launcher_cpp::createJob(Launcher::Job * new_job)
   {
     try 
     {
-      _batchmap[resource_name] = FactoryBatchManager(resource_definition);
+      // Warning cannot write on one line like this, because map object is constructed before
+      // the method is called...
+      //_batchmap.[resource_name] = FactoryBatchManager(resource_definition);
+      Batch::BatchManager_eClient * batch_client = FactoryBatchManager(resource_definition);
+      _batchmap[resource_name] = batch_client;
     }
     catch(const LauncherException &ex)
     {
@@ -300,7 +306,20 @@ Launcher_cpp::createJobWithFile(const std::string xmlExecuteFile,
 
   // Creating a new job
   Launcher::Job_Command * new_job = new Launcher::Job_Command();
-  new_job->setJobFile(job_params.Command);
+
+  string cmdFile = Kernel_Utils::GetTmpFileName();  
+#ifndef WIN32
+  cmdFile += ".sh";
+#else
+  cmdFile += ".bat";
+#endif
+  ofstream os;
+  os.open(cmdFile.c_str(), ofstream::out );
+  os << "#! /bin/sh" << endl;
+  os << job_params.Command;
+  os.close();
+
+  new_job->setJobFile(cmdFile);
   new_job->setLocalDirectory(job_params.RefDirectory);
   new_job->setWorkDirectory(job_params.MachinesList[clusterName].WorkDirectory);
   new_job->setEnvFile(job_params.MachinesList[clusterName].EnvFile);
@@ -312,7 +331,13 @@ Launcher_cpp::createJobWithFile(const std::string xmlExecuteFile,
 
   resourceParams p;
   p.hostname = clusterName;
+  p.name = "";
+  p.OS = "";
   p.nb_proc = job_params.NbOfProcesses;
+  p.nb_node = 0;
+  p.nb_proc_per_node = 0;
+  p.cpu_clock = 0;
+  p.mem_mb = 0;
   new_job->setResourceRequiredParams(p);
 
   createJob(new_job);
index ab11e0daff57234c5ff9f338860b376a48803d2a..87dd1c923f21135f8d855daa1a3d5e40a35b5ecb 100644 (file)
@@ -127,6 +127,7 @@ libLauncher_la_SOURCES=\
        Launcher.cxx
 
 libLauncher_la_CPPFLAGS =\
+       -I$(srcdir)/../Basics \
        -I$(srcdir)/../ResourcesManager \
        @LIBBATCH_INCLUDES@ \
        @MPI_INCLUDES@ \
index 4601e3229a8396c278b51e65144acfe9d8111b60..2cf3e8b7280fa1cdb4ed78db15b0cbf591c3467c 100755 (executable)
@@ -119,17 +119,20 @@ void SALOME_ResourcesCatalog_Handler::ProcessXmlDocument(xmlDocPtr theDoc)
       bool Ok = ProcessMachine(aCurNode, _resource);
       if (Ok)
       {
-        // Adding a resource
-        if(_resource.HostName == "localhost")
-        {
-          _resource.HostName = Kernel_Utils::GetHostname();
-          if (_resource.Name == "localhost")
-          {
-            _resource.Name = Kernel_Utils::GetHostname();
-            _resource.DataForSort._Name = Kernel_Utils::GetHostname();
-          }
-        }
-        _resources_list[_resource.Name] = _resource;
+       // Adding a resource
+       if(_resource.HostName == "localhost")
+       {
+         _resource.HostName = Kernel_Utils::GetHostname();
+         if (_resource.Name == "localhost")
+         {
+           _resource.Name = Kernel_Utils::GetHostname();
+           _resource.DataForSort._Name = Kernel_Utils::GetHostname();
+         }
+       }
+       map<string, ParserResourcesType>::const_iterator iter = _resources_list.find(_resource.Name);
+       if (iter != _resources_list.end())
+         RES_INFOS("Warning resource " << _resource.Name << " already added, keep last resource found !");
+       _resources_list[_resource.Name] = _resource;
       }
     }
     // Cas de la déclaration d'un cluster
@@ -138,7 +141,10 @@ void SALOME_ResourcesCatalog_Handler::ProcessXmlDocument(xmlDocPtr theDoc)
       _resource.Clear();
       if(ProcessCluster(aCurNode, _resource))
       {
-        _resources_list[_resource.Name] = _resource;
+       map<string, ParserResourcesType>::const_iterator iter = _resources_list.find(_resource.Name);
+       if (iter != _resources_list.end())
+         RES_INFOS("Warning resource " << _resource.Name << " already added, keep last resource found !");
+       _resources_list[_resource.Name] = _resource;
       }
     }
     aCurNode = aCurNode->next;
index c31f0ac5e51b74c2896888fd8b447ebfe0c8374a..a84eca4d142b89d9e7a5ec84975c96319ac24004 100644 (file)
@@ -253,6 +253,8 @@ SALOME_ResourcesManager::GetResourceDefinition(const char * name)
     p_ptr->batch = "lsf";
   else if( resource.Batch == sge )
     p_ptr->batch = "sge";
+  else if( resource.Batch == ssh_batch )
+    p_ptr->batch = "ssh";
 
   return p_ptr;
 }