]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
CCAR: several changes in Container Manager and Resources Manager CCAR_cm3_end
authorcaremoli <caremoli>
Thu, 30 Apr 2009 11:51:53 +0000 (11:51 +0000)
committercaremoli <caremoli>
Thu, 30 Apr 2009 11:51:53 +0000 (11:51 +0000)
1- remove unused members in MachineParameters, keep only members for requests
   the members removed are : alias, protocol, username, applipath, mpiImpl, batch
2- remove the enum policy which is replaced by a new member in MachineParameters (policy)
3- add a new member computerList in MachineParameters structure to specify a list of machines
   in a request to Container Manager
3- remove no more used parameters (policy, possibleComputers, componentList
   in FindOrStartContainer, FindOrStarParallelContainer, StartContainer,
   GiveContainer and GetFittingResources. These operations now take only
   one argument : a MachineParameters structure.
4- adapt LifeCycle to these changes

20 files changed:
idl/SALOME_ContainerManager.idl
src/Container/SALOME_ContainerManager.cxx
src/Container/SALOME_ContainerManager.hxx
src/Launcher/Launcher.cxx
src/Launcher/SALOME_Launcher.cxx
src/LifeCycleCORBA/SALOME_FileTransferCORBA.cxx
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.cxx
src/LifeCycleCORBA/SALOME_LifeCycleCORBA.hxx
src/LifeCycleCORBA/Test/LifeCycleCORBATest.cxx
src/LifeCycleCORBA/TestContainerManager.cxx
src/LifeCycleCORBA_SWIG/LifeCycleCORBA.py
src/LifeCycleCORBA_SWIG/Test/LifeCycleCORBA_SWIGTest.py
src/LifeCycleCORBA_SWIG/Test/Makefile.am
src/LifeCycleCORBA_SWIG/Test/testcontainermanager.py [new file with mode: 0644]
src/LifeCycleCORBA_SWIG/Test/testresourcemanager.py [new file with mode: 0644]
src/LifeCycleCORBA_SWIG/libSALOME_LifeCycleCORBA.i
src/ResourcesManager/ResourcesManager.cxx
src/ResourcesManager/ResourcesManager.hxx
src/ResourcesManager/SALOME_ResourcesManager.cxx
src/ResourcesManager/SALOME_ResourcesManager.hxx

index b7c4ace4a16d762dfed5806cde8db82fe665a4e5..184f341dae2f724819aac1ed1ba64b634908f999 100644 (file)
@@ -47,14 +47,6 @@ struct MachineParameters
   string container_name;
   //! host name if given else automatic
   string hostname;
-  //! if given alias name to use ??
-  string alias;
-  //! protocol to use to start a remote container (ssh or rsh)
-  string protocol;
-  //! login name to use to start a remote container
-  string username;
-  //! salome application to use to start a remote container
-  string applipath;
   //! if given list of components that could be loaded on the container
   CompoList componentList;
   //! if given restricted list of machines to search in
@@ -69,12 +61,8 @@ struct MachineParameters
   long nb_proc_per_node;
   //! required number of node
   long nb_node;
-  //! if true start a MPI container ??
+  //! if true start a MPI container
   boolean isMPI;
-  //! required MPI implementation to use
-  string mpiImpl;
-  //! required batch system to use
-  string batch;
   //! container working directory 
   string workingdir;
   //! creation mode for GiveContainer. 
@@ -96,6 +84,7 @@ struct MachineDefinition
 {
   //! host name 
   string hostname;
+  //! alias name 
   string alias;
   //! protocol to use to start a remote container (ssh or rsh)
   string protocol;
@@ -124,17 +113,6 @@ struct MachineDefinition
 //! exception thrown if a computer is not found in the catalog
   exception NotFound {};
 
-//! enumeration to set a resource management policy
-  enum policy {
-  //! first machine in the list of admissible computers
-  P_FIRST,
-  //! next machine in the list of admissible computers
-  P_CYCL,
-  //! best machine in the list of admissible computers
-  P_BEST};
-//! resource management policy
-  typedef policy ResPolicy;
-
 //!  Structure used for Salome Batch Job parameters
 struct BatchParameters
 {
@@ -180,35 +158,27 @@ struct BatchParameters
   interface ContainerManager
   {
     //!  Find an existing container satisfying the constraints given by input parameters or start a new one.
-    Container FindOrStartContainer( in MachineParameters params,
-                                   in MachineList possibleComputers);
+    Container FindOrStartContainer( in MachineParameters params);
 
     //!  This operation launches a PaCO++ container.
     /*!  
-
       \param Description of the container resquested.
       \param List of computers ressources.
 
       \return Container's CORBA reference.
     */
-    Container FindOrStartParallelContainer( in MachineParameters params,
-                                           in MachineList possibleComputers);
+    Container FindOrStartParallelContainer( in MachineParameters params);
 
     //!  Start a new container satisfying the constraints given by input parameters.
-    Container StartContainer( in MachineParameters params,
-                             in ResPolicy policy,
-                             in CompoList componentList );
+    Container StartContainer( in MachineParameters params);
 
     //!  Same as StartContainer except that in batch all containers have already been launched
     /*! 
-
          We are in batch if environment variable SALOME_BATCH is 1.
          In this case, containers have been launched at the beginning of the Salome session and 
          the container manager picks one in the pool of existing containers.
     */
-    Container GiveContainer( in MachineParameters params,
-                            in ResPolicy policy,
-                            in CompoList componentList );
+    Container GiveContainer( in MachineParameters params);
 
     //!  Shutdown all containers that have been launched by the container manager
     void ShutdownContainers();
@@ -231,9 +201,8 @@ struct BatchParameters
     /*! 
          The constraints are resource constraints (params) and components constraints (componentList)
     */
-    MachineList GetFittingResources( in MachineParameters params,
-                                    in CompoList componentList )
-      raises (SALOME::SALOME_Exception);
+    MachineList GetFittingResources( in MachineParameters params)
+                                    raises (SALOME::SALOME_Exception);
 
     //!  Get the current machine parameters of a computer
     MachineDefinition GetMachineParameters( in string hostname );
index e2acfc461843b442f30329a7a938b46394cf7368..939f53bdb5aaab1ea31de98f40c046224c524924 100644 (file)
@@ -96,8 +96,8 @@ SALOME_ContainerManager::~SALOME_ContainerManager()
 }
 
 //=============================================================================
+//! shutdown all the containers, then the ContainerManager servant
 /*! CORBA method:
- *  shutdown all the containers, then the ContainerManager servant
  */
 //=============================================================================
 
@@ -111,8 +111,8 @@ void SALOME_ContainerManager::Shutdown()
 }
 
 //=============================================================================
+//! Loop on all the containers listed in naming service, ask shutdown on each
 /*! CORBA Method:
- *  Loop on all the containers listed in naming service, ask shutdown on each
  */
 //=============================================================================
 
@@ -174,48 +174,56 @@ void SALOME_ContainerManager::ShutdownContainers()
 }
 
 //=============================================================================
-//!  Find a suitable Container in a list of machines, or start one
+//! Give a suitable Container given constraints
 /*! CORBA Method:
  *  \param params            Machine Parameters required for the container
- *  \param possibleComputers list of machines usable for find or start
+ *  \return the container or nil
  */
 //=============================================================================
 
 Engines::Container_ptr
-SALOME_ContainerManager::
-FindOrStartContainer(const Engines::MachineParameters& params,
-                     const Engines::MachineList& possibleComputers)
+SALOME_ContainerManager::GiveContainer(const Engines::MachineParameters& params)
 {
-  Engines::Container_ptr ret = FindContainer(params,possibleComputers);
-  if(!CORBA::is_nil(ret))
-    return ret;
-  MESSAGE("Container doesn't exist try to launch it ...");
+  char *valenv=getenv("SALOME_BATCH");
+  if(valenv)
+    if (strcmp(valenv,"1")==0)
+      {
+        if(_batchLaunchedContainers.empty())
+          fillBatchLaunchedContainers();
 
-  return StartContainer(params,possibleComputers,Engines::P_FIRST);
+        if (_batchLaunchedContainersIter == _batchLaunchedContainers.end())
+          _batchLaunchedContainersIter = _batchLaunchedContainers.begin();
 
+        Engines::Container_ptr rtn = Engines::Container::_duplicate(*_batchLaunchedContainersIter);
+        _batchLaunchedContainersIter++;
+        return rtn;
+      }
+  return StartContainer(params);
 }
 
 //=============================================================================
-//! Start a suitable Container in a list of machines with constraints and a policy
+//! Start a suitable Container in a list of machines with constraints 
 /*! C++ Method:
  * Constraints are given by a machine parameters struct
  *  \param params            Machine Parameters required for the container
  *  \param possibleComputers list of machines usable for start
- *  \param policy        policy to use (first,cycl or best)
  *  \param container_exe specific container executable (default=SALOME_Container)
  */
 //=============================================================================
 
 Engines::Container_ptr
-SALOME_ContainerManager::
-StartContainer(const Engines::MachineParameters& params,
+SALOME_ContainerManager::StartContainer(const Engines::MachineParameters& params,
                const Engines::MachineList& possibleComputers,
-               Engines::ResPolicy policy,const std::string& container_exe)
+               const std::string& container_exe)
 {
 #ifdef WITH_PACO_PARALLEL
   std::string parallelLib(params.parallelLib);
   if (parallelLib != "")
-    return FindOrStartParallelContainer(params, possibleComputers);
+    {
+      Engines::MachineParameters myparams(params);
+      myparams.computerList=possibleComputers;
+      return FindOrStartParallelContainer(myparams);
+    }
 #endif
   string containerNameInNS;
   Engines::Container_ptr ret = Engines::Container::_nil();
@@ -352,21 +360,16 @@ StartContainer(const Engines::MachineParameters& params,
 }
 
 //=============================================================================
-//! Start a suitable Container for a list of components with constraints and a policy
+//! Start a suitable Container given constraints 
 /*! CORBA Method:
  *  \param params            Machine Parameters required for the container
- *  \param policy        policy to use (first,cycl or best)
- *  \param componentList list of component to be loaded on this container
  */
 //=============================================================================
 
 Engines::Container_ptr
-SALOME_ContainerManager::
-StartContainer(const Engines::MachineParameters& params,
-               Engines::ResPolicy policy,
-               const Engines::CompoList& componentList)
+SALOME_ContainerManager::StartContainer(const Engines::MachineParameters& params)
 {
-  Engines::MachineList_var possibleComputers = _ResManager->GetFittingResources(params,componentList);
+  Engines::MachineList_var possibleComputers = _ResManager->GetFittingResources(params);
 
   // Look into ModulCatalog if a specific container must be launched
   CORBA::String_var container_exe;
@@ -378,9 +381,9 @@ StartContainer(const Engines::MachineParameters& params,
       if (CORBA::is_nil (Catalog))
         return Engines::Container::_nil();
       // Loop through component list
-      for(unsigned int i=0;i<componentList.length();i++)
+      for(unsigned int i=0;i<params.componentList.length();i++)
         {
-          const char* compoi = componentList[i];
+          const char* compoi = params.componentList[i];
           SALOME_ModuleCatalog::Acomponent_var compoInfo = Catalog->GetComponent(compoi);
           if (CORBA::is_nil (compoInfo))
             {
@@ -411,9 +414,77 @@ StartContainer(const Engines::MachineParameters& params,
     }
 
   if(found)
-    return StartContainer(params,possibleComputers,policy,container_exe.in());
+    return StartContainer(params,possibleComputers,container_exe.in());
   else
-    return StartContainer(params,possibleComputers,policy);
+    return StartContainer(params,possibleComputers);
+}
+
+//=============================================================================
+//!  Find or start a suitable Container given some constraints
+/*! CORBA Method:
+ *  \param params            Machine Parameters required for the container
+ *  \return the container or nil
+ */
+//=============================================================================
+
+Engines::Container_ptr
+SALOME_ContainerManager::FindOrStartContainer(const Engines::MachineParameters& params)
+{
+  Engines::Container_ptr ret = FindContainer(params,params.computerList);
+  if(!CORBA::is_nil(ret))
+    return ret;
+  MESSAGE("Container doesn't exist try to launch it ...");
+
+  return StartContainer(params);
+}
+
+//=============================================================================
+//! Find a container given constraints (params) on a list of machines (possibleComputers)
+/*!
+ *
+ */
+//=============================================================================
+
+Engines::Container_ptr
+SALOME_ContainerManager::FindContainer(const Engines::MachineParameters& params,
+                                       const Engines::MachineList& possibleComputers)
+{
+  MESSAGE("FindContainer "<<possibleComputers.length());
+  for(unsigned int i=0;i<possibleComputers.length();i++)
+    {
+      MESSAGE("FindContainer possible " << possibleComputers[i]);
+      Engines::Container_ptr cont = FindContainer(params,possibleComputers[i]);
+      if( !CORBA::is_nil(cont) )
+        return cont;
+    }
+  MESSAGE("FindContainer: not found");
+  return Engines::Container::_nil();
+}
+
+//=============================================================================
+//! Find a container given constraints (params) on a machine (theMachine)
+/*!
+ *
+ */
+//=============================================================================
+
+Engines::Container_ptr
+SALOME_ContainerManager::FindContainer(const Engines::MachineParameters& params,
+                                       const char *theMachine)
+{
+  string containerNameInNS(_NS->BuildContainerNameForNS(params,theMachine));
+  CORBA::Object_var obj = _NS->Resolve(containerNameInNS.c_str());
+  try
+    {
+      if(obj->_non_existent())
+        return Engines::Container::_nil();
+      else
+        return Engines::Container::_narrow(obj);
+    }
+  catch(const CORBA::Exception& e)
+    {
+      return Engines::Container::_nil();
+    }
 }
 
 #ifdef WITH_PACO_PARALLEL
@@ -421,15 +492,11 @@ StartContainer(const Engines::MachineParameters& params,
 /*! CORBA Method:
  *  Find or Start a suitable PaCO++ Parallel Container in a list of machines.
  *  \param params            Machine Parameters required for the container
- *  \param possibleComputers list of machines usable for find or start
- *
  *  \return CORBA container reference.
  */
 //=============================================================================
 Engines::Container_ptr
-SALOME_ContainerManager::
-FindOrStartParallelContainer(const Engines::MachineParameters& params_const,
-                             const Engines::MachineList& possibleComputers)
+SALOME_ContainerManager::FindOrStartParallelContainer(const Engines::MachineParameters& params_const)
 {
   CORBA::Object_var obj;
   PaCO::InterfaceManager_var proxy;
@@ -440,14 +507,14 @@ FindOrStartParallelContainer(const Engines::MachineParameters& params_const,
   // Currently not as good as could be since
   // we have to verified the number of nodes of the container
   // if a user tell that.
-  ret = FindContainer(params, possibleComputers);
+  ret = FindContainer(params, params.computerList);
 
   if(CORBA::is_nil(ret)) {
     // Step 2 : Starting a new parallel container
     INFOS("[FindOrStartParallelContainer] Starting a parallel container");
 
     // Step 2.1 : Choose a computer
-    string theMachine = _ResManager->FindFirst(possibleComputers);
+    string theMachine = _ResManager->FindFirst(params.computerList);
     if(theMachine == "") {
       INFOS("[FindOrStartParallelContainer] !!!!!!!!!!!!!!!!!!!!!!!!!!");
       INFOS("[FindOrStartParallelContainer] No possible computer found");
@@ -544,15 +611,11 @@ FindOrStartParallelContainer(const Engines::MachineParameters& params_const,
 /*! CORBA Method:
  *  Find or Start a suitable PaCO++ Parallel Container in a list of machines.
  *  \param params            Machine Parameters required for the container
- *  \param possibleComputers list of machines usable for find or start
- *
  *  \return CORBA container reference.
  */
 //=============================================================================
 Engines::Container_ptr
-SALOME_ContainerManager::
-FindOrStartParallelContainer(const Engines::MachineParameters& params,
-                            const Engines::MachineList& possibleComputers)
+SALOME_ContainerManager::FindOrStartParallelContainer(const Engines::MachineParameters& params)
 {
   Engines::Container_ptr ret = Engines::Container::_nil();
   INFOS("[FindOrStartParallelContainer] is disabled !");
@@ -561,87 +624,6 @@ FindOrStartParallelContainer(const Engines::MachineParameters& params,
 }
 #endif
 
-//=============================================================================
-//! Give a suitable Container for a list of components with constraints and a policy
-/*! CORBA Method:
- *  \param params            Machine Parameters required for the container
- *  \param policy        policy to use (first,cycl or best)
- *  \param componentList list of component to be loaded on this container
- */
-//=============================================================================
-
-Engines::Container_ptr
-SALOME_ContainerManager::
-GiveContainer(const Engines::MachineParameters& params,
-              Engines::ResPolicy policy,
-              const Engines::CompoList& componentList)
-{
-  char *valenv=getenv("SALOME_BATCH");
-  if(valenv)
-    if (strcmp(valenv,"1")==0)
-      {
-       if(_batchLaunchedContainers.empty())
-         fillBatchLaunchedContainers();
-
-       if (_batchLaunchedContainersIter == _batchLaunchedContainers.end())
-         _batchLaunchedContainersIter = _batchLaunchedContainers.begin();
-
-       Engines::Container_ptr rtn = Engines::Container::_duplicate(*_batchLaunchedContainersIter);
-       _batchLaunchedContainersIter++;
-        return rtn;
-      }
-  return StartContainer(params,policy,componentList);
-}
-
-//=============================================================================
-/*! 
- * 
- */
-//=============================================================================
-
-Engines::Container_ptr
-SALOME_ContainerManager::
-FindContainer(const Engines::MachineParameters& params,
-             const char *theMachine)
-{
-  string containerNameInNS(_NS->BuildContainerNameForNS(params,theMachine));
-  CORBA::Object_var obj = _NS->Resolve(containerNameInNS.c_str());
-  try
-    {
-      if(obj->_non_existent())
-        return Engines::Container::_nil();
-      else
-        return Engines::Container::_narrow(obj);
-    }
-  catch(const CORBA::Exception& e)
-    {
-      return Engines::Container::_nil();
-    }
-}
-
-//=============================================================================
-/*! 
- * 
- */
-//=============================================================================
-
-Engines::Container_ptr
-SALOME_ContainerManager::
-FindContainer(const Engines::MachineParameters& params,
-             const Engines::MachineList& possibleComputers)
-{
-  MESSAGE("FindContainer "<<possibleComputers.length());
-  for(unsigned int i=0;i<possibleComputers.length();i++)
-    {
-      MESSAGE("FindContainer possible " << possibleComputers[i]);
-      Engines::Container_ptr cont = FindContainer(params,possibleComputers[i]);
-      if( !CORBA::is_nil(cont) )
-       return cont;
-    }
-  MESSAGE("FindContainer: not found");
-  return Engines::Container::_nil();
-}
-
 //=============================================================================
 /*! This method launches the parallel container.
  *  It will may be placed on the ressources manager.
index d57dfba1d9e56ba900425744dbdd22a3f2620466..6d7d37c8af8860ba19ba8715b18922db45a20b9e 100644 (file)
@@ -42,43 +42,36 @@ public:
   SALOME_ContainerManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_ResourcesManager *rm, SALOME_NamingService *ns);
   ~SALOME_ContainerManager();
 
-  Engines::Container_ptr
-  FindOrStartContainer(const Engines::MachineParameters& params,
-                      const Engines::MachineList& possibleComputer);
+  void Shutdown();
+  void ShutdownContainers();
 
   Engines::Container_ptr
   StartContainer(const Engines::MachineParameters& params,
-                const Engines::MachineList& possibleComputer,
-                Engines::ResPolicy policy,
+                 const Engines::MachineList& possibleComputer,
                  const std::string& container_exe="SALOME_Container");
 
   Engines::Container_ptr
-  StartContainer(const Engines::MachineParameters& params,
-                 Engines::ResPolicy policy,
-                 const Engines::CompoList& componentList);
+  StartContainer(const Engines::MachineParameters& params);
 
   Engines::Container_ptr
-  GiveContainer(const Engines::MachineParameters& params,
-               Engines::ResPolicy policy,
-               const Engines::CompoList& componentList);
+  GiveContainer(const Engines::MachineParameters& params);
 
-  void Shutdown();
-  void ShutdownContainers();
+  Engines::Container_ptr
+  FindOrStartContainer(const Engines::MachineParameters& params);
 
   static const char *_ContainerManagerNameInNS;
 
   // Parallel extension
   Engines::Container_ptr
-  FindOrStartParallelContainer(const Engines::MachineParameters& params,
-                              const Engines::MachineList& possibleComputer);
+  FindOrStartParallelContainer(const Engines::MachineParameters& params);
 protected:
   Engines::Container_ptr
   FindContainer(const Engines::MachineParameters& params,
-               const Engines::MachineList& possibleComputers);
+                const Engines::MachineList& possibleComputers);
 
   Engines::Container_ptr
   FindContainer(const Engines::MachineParameters& params,
-               const char *theMachine);
+                const char *theMachine);
 
   // Parallel extension
   CORBA::Object_ptr 
index 6dd80e1899b89a35467142675bdf75a713f847ed..b6a6ea2caf065a473ce9ea1c4a31ef60f4ee516a 100644 (file)
@@ -92,9 +92,8 @@ long Launcher_cpp::submitJob( const std::string xmlExecuteFile,
   // verify if cluster is in resources catalog
   machineParams params;
   params.hostname = clusterName;
-  vector<string> aCompoList ;
   try{
-    aMachineList = _ResManager->GetFittingResources(params, aCompoList);
+    aMachineList = _ResManager->GetFittingResources(params);
   }
   catch(const ResourcesException &ex){
     throw LauncherException(ex.msg.c_str());
@@ -207,9 +206,8 @@ long Launcher_cpp::submitSalomeJob( const string fileToExecute ,
     throw LauncherException("Batch parameters are bad (see informations above)");
 
   // find a cluster matching the structure params
-  vector<string> aCompoList ;
   try{
-    aMachineList = _ResManager->GetFittingResources(params, aCompoList);
+    aMachineList = _ResManager->GetFittingResources(params);
   }
   catch(const ResourcesException &ex){
     throw LauncherException(ex.msg.c_str());
@@ -298,8 +296,7 @@ string Launcher_cpp::queryJob( long id,
     throw LauncherException("You must set Resources Manager to Launcher!!");
 
   // find a cluster matching params structure
-  vector<string> aCompoList ;
-  vector<string> aMachineList = _ResManager->GetFittingResources( params , aCompoList ) ;
+  vector<string> aMachineList = _ResManager->GetFittingResources( params ) ;
   ParserResourcesType p = _ResManager->GetResourcesList(aMachineList[0]);
   string clustername(p.Alias);
     
@@ -346,8 +343,7 @@ void Launcher_cpp::deleteJob( const long id,
     throw LauncherException("You must set Resources Manager to Launcher!!");
 
   // find a cluster matching params structure
-  vector<string> aCompoList ;
-  vector<string> aMachineList = _ResManager->GetFittingResources( params , aCompoList ) ;
+  vector<string> aMachineList = _ResManager->GetFittingResources( params ) ;
   ParserResourcesType p = _ResManager->GetResourcesList(aMachineList[0]);
   string clustername(p.Alias);
     
@@ -385,8 +381,7 @@ void Launcher_cpp::getResultsJob( const string directory,
   if(!_ResManager)
     throw LauncherException("You must set Resources Manager to Launcher!!");
 
-  vector<string> aCompoList ;
-  vector<string> aMachineList = _ResManager->GetFittingResources( params , aCompoList ) ;
+  vector<string> aMachineList = _ResManager->GetFittingResources( params ) ;
   ParserResourcesType p = _ResManager->GetResourcesList(aMachineList[0]);
   string clustername(p.Alias);
     
index 817fa0f5066054f4288ade7197cd407282af6088..9ec5bf1f992d6e5c4aae804b00f70d803bf6ed8d 100644 (file)
@@ -198,8 +198,7 @@ SALOME_Launcher::testBatch(const Engines::MachineParameters& params)
   try
   {
     // find a cluster matching the structure params
-    Engines::CompoList aCompoList ;
-    Engines::MachineList *aMachineList = _ResManager->GetFittingResources(params, aCompoList);
+    Engines::MachineList *aMachineList = _ResManager->GetFittingResources(params);
     if (aMachineList->length() == 0)
       throw SALOME_Exception("No resources have been found with your parameters");
 
index dee3b3109ce5d3857d65c2478a86ec9305fcd5ed..26e08da5640e655d01c75e6852ec5820c0e8ccab 100644 (file)
@@ -130,11 +130,7 @@ string SALOME_FileTransferCORBA::getLocalFile(string localFile)
       params.container_name = _containerName.c_str();
       params.hostname = _refMachine.c_str();
 
-      Engines::CompoList clist;
-      Engines::MachineList_var listOfMachines =
-       resManager->GetFittingResources(params, clist);
-
-      container = contManager->FindOrStartContainer(params, listOfMachines);
+      container = contManager->FindOrStartContainer(params);
       if (CORBA::is_nil(container))
        {
          INFOS("machine " << _refMachine << " unreachable");
index a96f9fac7e7dfc17995390661c0282c14f353b84..cdc04fde9db39a9d2d95aa5899e5c9821b0816bb 100644 (file)
@@ -134,13 +134,12 @@ SALOME_LifeCycleCORBA::FindComponent(const Engines::MachineParameters& params,
   if (! isKnownComponentClass(componentName))
     return Engines::Component::_nil();
 
-  Engines::CompoList clist;
-  clist.length(1);
-  clist[0] = componentName;
-  Engines::MachineList_var listOfMachines =
-    _ResManager->GetFittingResources(params, clist);
+  Engines::MachineParameters parms(params);
+  parms.componentList.length(1);
+  parms.componentList[0] = componentName;
+  Engines::MachineList_var listOfMachines = _ResManager->GetFittingResources(parms);
 
-  Engines::Component_var compo = _FindComponent(params,
+  Engines::Component_var compo = _FindComponent(parms,
                                                componentName,
                                                studyId,
                                                listOfMachines);
@@ -168,16 +167,13 @@ SALOME_LifeCycleCORBA::LoadComponent(const Engines::MachineParameters& params,
   if (! isKnownComponentClass(componentName))
     return Engines::Component::_nil();
 
-  Engines::CompoList clist;
-  clist.length(1);
-  clist[0] = componentName;
-  Engines::MachineList_var listOfMachines =
-    _ResManager->GetFittingResources(params, clist);
+  Engines::MachineParameters parms(params);
+  parms.componentList.length(1);
+  parms.componentList[0] = componentName;
 
-  Engines::Component_var compo = _LoadComponent(params,
+  Engines::Component_var compo = _LoadComponent(parms,
                                                componentName,
-                                               studyId,
-                                               listOfMachines);
+                                               studyId);
 
   return compo._retn();
 }
@@ -204,22 +200,20 @@ FindOrLoad_Component(const Engines::MachineParameters& params,
   if (! isKnownComponentClass(componentName))
     return Engines::Component::_nil();
 
-  Engines::CompoList clist;
-  clist.length(1);
-  clist[0] = componentName;
-  Engines::MachineList_var listOfMachines =
-    _ResManager->GetFittingResources(params,clist);
+  Engines::MachineParameters parms(params);
+  parms.componentList.length(1);
+  parms.componentList[0] = componentName;
+  Engines::MachineList_var listOfMachines = _ResManager->GetFittingResources(parms);
 
-  Engines::Component_var compo = _FindComponent(params,
+  Engines::Component_var compo = _FindComponent(parms,
                                                componentName,
                                                studyId,
                                                listOfMachines);
 
   if(CORBA::is_nil(compo))
-    compo = _LoadComponent(params,
+    compo = _LoadComponent(parms,
                           componentName,
-                          studyId,
-                          listOfMachines);
+                          studyId);
 
   return compo._retn();
 }
@@ -369,10 +363,6 @@ void SALOME_LifeCycleCORBA::preSet( Engines::MachineParameters& params)
 {
   params.container_name = "";
   params.hostname = "";
-  params.alias = "";
-  params.protocol = "";
-  params.username = "";
-  params.applipath = "";
   //param.componentList = 0;
   //param.computerList = 0;
   params.OS = "";
@@ -381,8 +371,6 @@ void SALOME_LifeCycleCORBA::preSet( Engines::MachineParameters& params)
   params.nb_proc_per_node = 0;
   params.nb_node = 0;
   params.isMPI = false;
-  params.mpiImpl="";
-  params.batch="";
   params.workingdir = "";
   params.mode = "";
   params.policy = "";
@@ -634,7 +622,6 @@ _FindComponent(const Engines::MachineParameters& params,
  *  \param params         machine parameters like type or name...
  *  \param componentName  the name of component class
  *  \param studyId        default = 0  : multistudy instance
- *  \param listOfMachines list of machine address
  *  \return a CORBA reference of the component instance, or _nil if problem
  */
 //=============================================================================
@@ -643,15 +630,12 @@ Engines::Component_ptr
 SALOME_LifeCycleCORBA::
 _LoadComponent(const Engines::MachineParameters& params, 
              const char *componentName,
-             int studyId,
-             const Engines::MachineList& listOfMachines)
+             int studyId)
 {
   MESSAGE("_LoadComponent, required " << params.container_name <<
          " " << componentName << " " << NbProc(params));
 
-  Engines::Container_var cont =
-    _ContManager->FindOrStartContainer(params,
-                                      listOfMachines);
+  Engines::Container_var cont = _ContManager->FindOrStartContainer(params);
   if (CORBA::is_nil(cont)) return Engines::Component::_nil();
 
   bool isLoadable = cont->load_component_Library(componentName);
@@ -683,19 +667,12 @@ SALOME_LifeCycleCORBA::Load_ParallelComponent(const Engines::MachineParameters&
   MESSAGE("Number of component nodes : " << params.nb_component_nodes);
   MESSAGE("Component Name : " << componentName);*/
 
-  Engines::CompoList clist;
-  clist.length(1);
-  clist[0] = componentName;
-  MESSAGE("Building a list of machines");
-  Engines::MachineList_var listOfMachines = _ResManager->GetFittingResources(params, clist);
-  if (listOfMachines->length() == 0)
-  {
-    INFOS("No matching machines founded !");
-    return Engines::Component::_nil();
-  }
+  Engines::MachineParameters parms(params);
+  parms.componentList.length(1);
+  parms.componentList[0] = componentName;
 
   MESSAGE("Starting Parallel Container");
-  Engines::Container_var cont = _ContManager->FindOrStartParallelContainer(params, listOfMachines);
+  Engines::Container_var cont = _ContManager->FindOrStartParallelContainer(parms);
   if (CORBA::is_nil(cont)) {
     INFOS("FindOrStartParallelContainer() returns a NULL container !");
     return Engines::Component::_nil();
@@ -739,16 +716,11 @@ void SALOME_LifeCycleCORBA::copyFile(const char* hostSrc, const char* fileSrc, c
   Engines::MachineParameters params;
   preSet(params);
 
-  Engines::MachineList listOfMachines;
-  listOfMachines.length(1);
-
   params.hostname = hostDest;
-  listOfMachines[0] = hostDest;
-  Engines::Container_var containerDest = contManager->FindOrStartContainer(params, listOfMachines);
+  Engines::Container_var containerDest = contManager->FindOrStartContainer(params);
 
   params.hostname = hostSrc;
-  listOfMachines[0] = hostSrc;
-  Engines::Container_var containerSrc = contManager->FindOrStartContainer(params, listOfMachines);
+  Engines::Container_var containerSrc = contManager->FindOrStartContainer(params);
 
   containerDest->copyFile(containerSrc,fileSrc,fileDest);
 }
index d7ba91303d52390585fdc3c0e8a2a3c6d94858c9..4083c428b6919d0bfe50a5f9ea5fb282839f0b33 100644 (file)
@@ -123,8 +123,7 @@ protected:
   Engines::Component_ptr
   _LoadComponent(const Engines::MachineParameters& params,
                 const char *componentName,
-                int studyId,
-                const Engines::MachineList& listOfMachines);
+                int studyId);
   
   SALOME_NamingService *_NS;
   Engines::ContainerManager_var _ContManager;
index 9629055e62fcc1684396b29625fb3b6f0eb760e1..fa4fc4777d6fd991563605c716baf80b0e33905a 100644 (file)
@@ -681,12 +681,10 @@ string LifeCycleCORBATest::GetRemoteHost()
 
   Engines::MachineParameters params;
   _LCC.preSet(params);               // empty params to get all the machines
+  params.componentList.length(1);
+  params.componentList[0]="SalomeTestComponent";
 
-  Engines::CompoList clist;
-  clist.length(1);
-  clist[0] = "SalomeTestComponent";
-  Engines::MachineList_var hostList =
-    resourcesManager->GetFittingResources(params,clist);
+  Engines::MachineList_var hostList = resourcesManager->GetFittingResources(params);
   CPPUNIT_ASSERT(hostList->length() > 1);
 
   string localHost = Kernel_Utils::GetHostname();
index c5fc4ef064cb473033438a4cb3c82ca815b8f689..aaa52b195c3cdc00ceb06f1a0cde02ff1cbbfcd5 100644 (file)
@@ -66,10 +66,9 @@ int main (int argc, char * argv[])
   Engines::ResourcesManager_var _ResManager=Engines::ResourcesManager::_narrow(obj);
 
   Engines::MachineParameters p;
-  Engines::CompoList clist;
-  clist.length(2);
-  clist[0] = "MED";
-  clist[1] = "GEOM";
+  p.componentList.length(2);
+  p.componentList[0] = "MED";
+  p.componentList[1] = "GEOM";
 
   p.hostname = "";
   p.OS = "LINUX";
@@ -83,19 +82,22 @@ int main (int argc, char * argv[])
   for(int i=0;i<10;i++){
     sprintf(st,"cycl_%d",i);
     p.container_name = CORBA::string_dup(st);
-    cont = _ContManager->GiveContainer(p,Engines::P_CYCL,clist);
+    p.policy="cycl";
+    cont = _ContManager->GiveContainer(p);
     if(CORBA::is_nil(cont)) error = true;
   }
 
   for(int i=0;i<10;i++){
     sprintf(st,"first_%d",i);
     p.container_name = CORBA::string_dup(st);
-    cont = _ContManager->GiveContainer(p,Engines::P_FIRST,clist);
+    p.policy="best";
+    cont = _ContManager->GiveContainer(p);
     if(CORBA::is_nil(cont)) error = true;
   }
 
   p.container_name = CORBA::string_dup("best");
-  cont = _ContManager->GiveContainer(p,Engines::P_BEST,clist);
+  p.policy="best";
+  cont = _ContManager->GiveContainer(p);
   if(CORBA::is_nil(cont)) bestImplemented = false;
   else bestImplemented = true;
 
index a2422f8b5eec4860fad3b8860ee82778dc01bc37..7946e1d54ca12b625cf7ba11758d2bc80a9a4dac 100644 (file)
@@ -39,12 +39,10 @@ class LifeCycleCORBA (SALOME_LifeCycleCORBA):
                                                           componentName)
 
 class MachineParameters (Engines.MachineParameters):
-          def __init__(self, container_name='', hostname='', alias='', protocol='', username='', 
-                             applipath='', componentList=[], computerList=[], OS='', mem_mb=0, cpu_clock=0, 
-                             nb_proc_per_node=0, nb_node=0, isMPI=False, mpiImpl='', batch='', workingdir='', 
+          def __init__(self, container_name='', hostname='', componentList=[], computerList=[], OS='', 
+                             mem_mb=0, cpu_clock=0, nb_proc_per_node=0, nb_node=0, isMPI=False, workingdir='', 
                              mode='start', policy='altcycl', parallelLib='', nb_component_nodes=0):
-            Engines.MachineParameters.__init__(self,container_name, hostname, alias, protocol, username, 
-                                                    applipath, componentList, computerList, OS, mem_mb, cpu_clock, 
-                                                    nb_proc_per_node, nb_node, isMPI, mpiImpl, batch, workingdir, 
+            Engines.MachineParameters.__init__(self,container_name, hostname, componentList, computerList, OS, 
+                                                    mem_mb, cpu_clock, nb_proc_per_node, nb_node, isMPI, workingdir, 
                                                     mode, policy, parallelLib, nb_component_nodes)
 
index d74b615377bacbf4f9e17814b673d136406325e3..ba9331b2f9eddc0f24d3a0d46bb680452da44698 100644 (file)
@@ -178,7 +178,7 @@ class LifeCycleCORBA_SWIGTest(unittest.TestCase):
         try:
             cp1=self.lcc.FindOrLoad_Component(containerName,"SalomeTestComponent")
         except RuntimeError,ex :
-            self.assertEqual(ex.args[0],'Salome Exception : unknown host')
+            self.assertEqual(ex.args[0],'unknown host')
         pass
        
     
index cd322e39d00d217864e8827bc99ac358dd4f1979..4191c3d5e0edc4b1b27d5f08d991c195529e0641 100644 (file)
@@ -38,6 +38,8 @@ salomeinclude_HEADERS=
 # Scripts to be installed
 dist_salomescript_PYTHON = \
        LifeCycleCORBA_SWIGTest.py \
+       testresourcemanager.py \
+       testcontainermanager.py \
        TestLifeCycleCORBA_SWIG.py
 
 #
diff --git a/src/LifeCycleCORBA_SWIG/Test/testcontainermanager.py b/src/LifeCycleCORBA_SWIG/Test/testcontainermanager.py
new file mode 100644 (file)
index 0000000..256d337
--- /dev/null
@@ -0,0 +1,56 @@
+import unittest
+import salome
+import Engines
+import LifeCycleCORBA
+salome.salome_init()
+cm= salome.lcc.getContainerManager()
+rm= salome.lcc.getResourcesManager()
+
+class TestContainerManager(unittest.TestCase):
+  """
+Test with catalog :
+<!DOCTYPE ResourcesCatalog>
+<resources>
+   <machine hostname="claui2c6" >
+   </machine>
+   <machine hostname="clt10br" >
+   </machine>
+</resources>
+"""
+  def setUp(self):
+    pass
+
+  def test0(self):
+    """"""
+    p=LifeCycleCORBA.MachineParameters(container_name="MyContainer",mode="start",
+                                       policy="best",componentList=["PYHELLO"])
+    co=cm.StartContainer( p )
+    print "Container:",co,co.getHostName(), co.getPID(),co._get_name()
+    self.assertEqual(co._get_name(), "/Containers/claui2c6/MyContainer")
+    co=cm.StartContainer( p )
+    self.assertEqual(co._get_name(), "/Containers/clt10br/MyContainer")
+
+  def test1(self):
+    """"""
+    p=LifeCycleCORBA.MachineParameters(container_name="MyContainer",mode="get",
+                                       policy="best",componentList=["PYHELLO"])
+    co=cm.StartContainer( p )
+    print "Container:",co,co.getHostName(), co.getPID(),co._get_name()
+    self.assertEqual(co._get_name(), "/Containers/claui2c6/MyContainer")
+    co=cm.StartContainer( p )
+    self.assertEqual(co._get_name(), "/Containers/clt10br/MyContainer")
+
+  def test2(self):
+    """"""
+    p=LifeCycleCORBA.MachineParameters(container_name="MyContainer",mode="getorstart",
+                                       policy="best",componentList=["PYHELLO"])
+    co=cm.StartContainer( p )
+    print "Container:",co,co.getHostName(), co.getPID(),co._get_name()
+    self.assertEqual(co._get_name(), "/Containers/claui2c6/MyContainer")
+    co=cm.StartContainer( p )
+    self.assertEqual(co._get_name(), "/Containers/clt10br/MyContainer")
+
+
+if __name__ == '__main__':
+  unittest.main()
+
diff --git a/src/LifeCycleCORBA_SWIG/Test/testresourcemanager.py b/src/LifeCycleCORBA_SWIG/Test/testresourcemanager.py
new file mode 100644 (file)
index 0000000..aba6295
--- /dev/null
@@ -0,0 +1,116 @@
+import unittest
+import salome
+import LifeCycleCORBA
+salome.salome_init()
+cm= salome.lcc.getContainerManager()
+rm= salome.lcc.getResourcesManager()
+
+class TestResourceManager(unittest.TestCase):
+  """
+Test with CatalogResources.xml:
+<!DOCTYPE ResourcesCatalog>
+<resources>
+   <machine hostname="m1" />
+   <machine hostname="m2" />
+   <machine hostname="m3" >
+     <modules moduleName="tutu" />
+   </machine>
+   <machine hostname="m4" >
+     <component name="sub" moduleName="tata" />
+   </machine>
+   <machine hostname="claui2c6" >
+     <modules moduleName="toto" />
+     <component name="add" moduleName="titi" />
+   </machine>
+</resources>
+"""
+  def setUp(self):
+    pass
+
+  def test0(self):
+    """host required"""
+    params=LifeCycleCORBA.MachineParameters(hostname="m3")
+    machineList=rm.GetFittingResources(params)
+    self.assertEqual(machineList, ["m3"])
+
+  def test1(self):
+    """OS required"""
+    params=LifeCycleCORBA.MachineParameters(OS="Linux")
+    machineList=rm.GetFittingResources(params)
+    self.assertEqual(machineList, [])
+
+  def test2(self):
+    """component add required"""
+    params=LifeCycleCORBA.MachineParameters(componentList=["add"])
+    machineList=rm.GetFittingResources(params)
+    self.assertEqual(machineList, ['claui2c6', 'm1', 'm2'])
+
+  def test3(self):
+    """component tutu required"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["tutu"]))
+    self.assertEqual(machineList, ['m1', 'm2', 'm3'])
+
+  def test4(self):
+    """component tata required"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["tata"]))
+    self.assertEqual(machineList, ['m1', 'm2'])
+
+  def test5(self):
+    """component titi required"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["titi"]))
+    self.assertEqual(machineList, ['m1', 'm2'])
+
+  def test6(self):
+    """component toto required"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["toto"]))
+    self.assertEqual(machineList, ['claui2c6', 'm1', 'm2'])
+
+  def test7(self):
+    """components add and toto required"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["add","toto"]))
+    self.assertEqual(machineList, ['claui2c6', 'm1', 'm2'])
+
+  def test8(self):
+    """components add and toto required"""
+    machineDef=rm.GetMachineParameters('claui2c6')
+    self.assertEqual(machineDef.componentList, ['toto', 'add'])
+
+  def test10(self):
+    """policy altcycl"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["add","toto"]))
+    self.assertEqual(rm.Find('altcycl',machineList), "claui2c6")
+    self.assertEqual(rm.Find('altcycl',machineList), "m1")
+    self.assertEqual(rm.Find('altcycl',machineList), "m2")
+    self.assertEqual(rm.Find('altcycl',machineList), "claui2c6")
+    self.assertEqual(rm.Find('altcycl',machineList), "m1")
+    self.assertEqual(rm.Find('altcycl',machineList), "m2")
+
+  def test11(self):
+    """policy cycl"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["add","toto"]))
+    self.assertEqual(rm.Find('cycl',machineList), "claui2c6")
+    self.assertEqual(rm.Find('cycl',machineList), "m1")
+    self.assertEqual(rm.Find('cycl',machineList), "m2")
+    self.assertEqual(rm.Find('cycl',machineList), "claui2c6")
+    self.assertEqual(rm.Find('cycl',machineList), "m1")
+    self.assertEqual(rm.Find('cycl',machineList), "m2")
+
+  def test12(self):
+    """policy first"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["add","toto"]))
+    self.assertEqual(rm.Find('first',machineList), "claui2c6")
+    self.assertEqual(rm.Find('first',machineList), "claui2c6")
+
+  def test13(self):
+    """policy best"""
+    machineList=rm.GetFittingResources(LifeCycleCORBA.MachineParameters(componentList=["add","toto"]))
+    self.assertEqual(rm.Find('best',machineList), "claui2c6")
+    self.assertEqual(rm.Find('best',machineList), "m1")
+    self.assertEqual(rm.Find('best',machineList), "m2")
+    self.assertEqual(rm.Find('best',machineList), "claui2c6")
+    self.assertEqual(rm.Find('best',machineList), "m1")
+    self.assertEqual(rm.Find('best',machineList), "m2")
+
+if __name__ == '__main__':
+  unittest.main()
+
index 3da83ad0dafb9de496352adb2a6d00b347ae324c..22da974baf643569d1685f9570c3a81c87c72693 100644 (file)
@@ -149,14 +149,6 @@ using namespace std;
            {
              param->hostname = CORBA::string_dup(PyString_AsString(value));
            }
-         else if (strcmp(keystr,"alias")==0)
-           param->alias = CORBA::string_dup(PyString_AsString(value));
-         else if (strcmp(keystr,"protocol")==0)
-           param->protocol = CORBA::string_dup(PyString_AsString(value));
-         else if (strcmp(keystr,"username")==0)
-           param->username = CORBA::string_dup(PyString_AsString(value));
-         else if (strcmp(keystr,"applipath")==0)
-           param->applipath = CORBA::string_dup(PyString_AsString(value));
          else if (strcmp(keystr,"OS")==0)
            {
              param->OS = CORBA::string_dup(PyString_AsString(value));
@@ -181,10 +173,6 @@ using namespace std;
            {
              param->isMPI = PyLong_AsLong(value);
            }
-         else if (strcmp(keystr,"mpiImpl")==0)
-             param->mpiImpl = CORBA::string_dup(PyString_AsString(value));
-         else if (strcmp(keystr,"batch")==0)
-             param->batch = CORBA::string_dup(PyString_AsString(value));
          else if (strcmp(keystr,"workingdir")==0)
              param->workingdir = CORBA::string_dup(PyString_AsString(value));
          else if (strcmp(keystr,"mode")==0)
index e09908f767975df73826f3c927d0065ccf7a5df8..381be2fd2fa403c48ede0d0f270c228a96111d8e 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <unistd.h>
 #include <libxml/parser.h>
 
 #include <algorithm>
@@ -82,6 +83,7 @@ ResourcesManager_cpp::ResourcesManager_cpp() throw(ResourcesException)
   _resourceManagerMap["altcycl"]=&altcycl;
   _resourceManagerMap["best"]=&altcycl;
   _resourceManagerMap[""]=&altcycl;
+
   _isAppliSalomeDefined = (getenv("APPLI") != 0);
   if(!getenv("KERNEL_ROOT_DIR"))
     throw ResourcesException("you must define KERNEL_ROOT_DIR environment variable!!");
@@ -120,22 +122,21 @@ ResourcesManager_cpp::~ResourcesManager_cpp()
 }
 
 //=============================================================================
+//! get the list of resource names fitting constraints given by params
 /*!
- *  get the list of name of ressources fitting for the specified component.
- *  If hostname specified, check it is local or known in resources catalog.
+ *  If hostname is specified, check if it is local or known in resources catalog.
  *
  *  Else
  *  - select first machines with corresponding OS (all machines if
  *    parameter OS empty),
- *  - then select the sublist of machines on witch the component is known
+ *  - then select the sublist of machines on which the component is known
  *    (if the result is empty, that probably means that the inventory of
  *    components is probably not done, so give complete list from previous step)
  */ 
 //=============================================================================
 
 std::vector<std::string> 
-ResourcesManager_cpp::GetFittingResources(const machineParams& params,
-                                     const std::vector<std::string>& componentList) throw(ResourcesException)
+ResourcesManager_cpp::GetFittingResources(const machineParams& params) throw(ResourcesException)
 {
   vector <std::string> vec;
 
@@ -196,10 +197,13 @@ ResourcesManager_cpp::GetFittingResources(const machineParams& params,
     
   else{
     // --- Search for available resources sorted by priority
+    vec=params.computerList;
+
     SelectOnlyResourcesWithOS(vec, params.OS.c_str());
       
-    KeepOnlyResourcesWithComponent(vec, componentList);
-       
+    KeepOnlyResourcesWithComponent(vec, params.componentList);
+
+    //if hosts list (vec) is empty, ignore componentList constraint and use only OS constraint
     if (vec.size() == 0)
       SelectOnlyResourcesWithOS(vec, params.OS.c_str());
     
@@ -343,6 +347,15 @@ void ResourcesManager_cpp::WriteInXmlFile()
 
 const MapOfParserResourcesType& ResourcesManager_cpp::ParseXmlFile()
 {
+  //Parse file only if its modification time is greater than lasttime (last registered modification time) 
+  static time_t lasttime=0;
+  struct stat statinfo;
+  int result = stat(_path_resources.c_str(), &statinfo);
+  if (result < 0) return _resourcesList;
+  if(statinfo.st_mtime <= lasttime)
+    return _resourcesList;
+  lasttime=statinfo.st_mtime;
+
   SALOME_ResourcesCatalog_Handler* handler =
     new SALOME_ResourcesCatalog_Handler(_resourcesList, _resourcesBatchList);
 
@@ -406,13 +419,29 @@ throw(ResourcesException)
 {
   string base(OS);
 
-  for (map<string, ParserResourcesType>::const_iterator iter =
-         _resourcesList.begin();
-       iter != _resourcesList.end();
-       iter++)
+  if(hosts.size()==0)
+    {
+      //No constraint on computer list : take all known resources with OS
+      map<string, ParserResourcesType>::const_iterator iter;
+      for (iter = _resourcesList.begin(); iter != _resourcesList.end(); iter++)
+        {
+          if ( (*iter).second.OS == base || base.size() == 0)
+            hosts.push_back((*iter).first);
+        }
+    }
+  else
     {
-      if ( (*iter).second.OS == base || base.size() == 0)
-        hosts.push_back((*iter).first);
+      //a computer list is given : take only resources with OS on those computers
+      vector<string> vec=hosts;
+      hosts.clear();
+      vector<string>::iterator iter;
+      for (iter = vec.begin(); iter != vec.end(); iter++)
+        {
+          MapOfParserResourcesType::const_iterator it = _resourcesList.find(*iter);
+          if(it != _resourcesList.end())
+            if ( (*it).second.OS == base || base.size() == 0 )
+              hosts.push_back(*iter);
+        }
     }
 }
 
@@ -439,7 +468,6 @@ throw(ResourcesException)
          vector<string>::const_iterator itt = find(mapOfComponentsOfCurrentHost.begin(),
                                              mapOfComponentsOfCurrentHost.end(),
                                              compoi);
-//                                           componentList[i]);
          if (itt == mapOfComponentsOfCurrentHost.end()){
            erasedHost = true;
            break;
index 608ce750b9433e058218cb4dbc4c618392cab3b4..c343a73e0fc0ef80c89a20e0420f449ddf37af10 100644 (file)
@@ -44,6 +44,8 @@ struct machineParams{
   unsigned int nb_proc_per_node;
   unsigned int cpu_clock;
   unsigned int mem_mb;
+  std::vector<std::string> componentList;
+  std::vector<std::string> computerList;
 };
 
 class RESOURCESMANAGER_EXPORT ResourcesException
@@ -65,8 +67,7 @@ class RESOURCESMANAGER_EXPORT ResourcesManager_cpp
     ~ResourcesManager_cpp();
 
     std::vector<std::string> 
-    GetFittingResources(const machineParams& params,
-                        const std::vector<std::string>& componentList) throw(ResourcesException);
+    GetFittingResources(const machineParams& params) throw(ResourcesException);
 
     std::string Find(const std::string& policy, const std::vector<std::string>& listOfMachines);
 
index 874b79ab6e9b787dbcc9f008dfa2cc4399a70c2f..3531bc30be0a4bbc529a5bfc55809bf3ddd1a78e 100644 (file)
@@ -125,22 +125,21 @@ void SALOME_ResourcesManager::Shutdown()
 }
 
 //=============================================================================
+//! get the name of resources fitting the specified constraints (params)
 /*!
- *  get the list of name of ressources fitting for the specified component.
  *  If hostname specified, check it is local or known in resources catalog.
  *
  *  Else
  *  - select first machines with corresponding OS (all machines if
  *    parameter OS empty),
- *  - then select the sublist of machines on witch the component is known
+ *  - then select the sublist of machines on which the component is known
  *    (if the result is empty, that probably means that the inventory of
  *    components is probably not done, so give complete list from previous step)
  */ 
 //=============================================================================
 
 Engines::MachineList *
-SALOME_ResourcesManager::GetFittingResources(const Engines::MachineParameters& params,
-                                            const Engines::CompoList& componentList)
+SALOME_ResourcesManager::GetFittingResources(const Engines::MachineParameters& params)
 {
 //   MESSAGE("ResourcesManager::GetFittingResources");
   machineParams p;
@@ -151,13 +150,15 @@ SALOME_ResourcesManager::GetFittingResources(const Engines::MachineParameters& p
   p.cpu_clock = params.cpu_clock;
   p.mem_mb = params.mem_mb;
 
-  vector<string> cl;
-  for(unsigned int i=0;i<componentList.length();i++)
-    cl.push_back(string(componentList[i]));
+  for(unsigned int i=0;i<params.componentList.length();i++)
+    p.componentList.push_back(string(params.componentList[i]));
+
+  for(unsigned int i=0;i<params.computerList.length();i++)
+    p.computerList.push_back(string(params.computerList[i]));
   
   Engines::MachineList *ret=new Engines::MachineList;
   try{
-      vector <std::string> vec = _rm.GetFittingResources(p,cl);
+      vector <std::string> vec = _rm.GetFittingResources(p);
       ret->length(vec.size());
       for(unsigned int i=0;i<vec.size();i++)
        (*ret)[i] = (vec[i]).c_str();
index e0fba7244e8f60837ca03112496a37aa21359d04..c8ec2a911fb76204a026af0b0caf12dbfdb63d34 100644 (file)
@@ -64,8 +64,7 @@ class SALOMERESOURCESMANAGER_EXPORT SALOME_ResourcesManager:
     ~SALOME_ResourcesManager();
 
     Engines::MachineList *
-    GetFittingResources(const Engines::MachineParameters& params,
-                        const Engines::CompoList& componentList);
+    GetFittingResources(const Engines::MachineParameters& params);
 
     char* FindFirst(const Engines::MachineList& listOfMachines);
     char* Find(const char *policy, const Engines::MachineList& listOfMachines);