Salome HOME
updated copyright message
[modules/kernel.git] / src / ResourcesManager / SALOME_ResourcesManager.cxx
index 8b09d8bddb515e489e9d9f2044d59e0bf5fbd969..632a326b651fbe580c212c436365748ea5f9b44f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -56,7 +56,11 @@ const char *SALOME_ResourcesManager::_ResourcesManagerNameInNS = "/ResourcesMana
  */ 
 //=============================================================================
 
-SALOME_ResourcesManager::SALOME_ResourcesManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService *ns, const char *xmlFilePath) : _rm(xmlFilePath)
+SALOME_ResourcesManager::SALOME_ResourcesManager(CORBA::ORB_ptr orb,
+                                                 PortableServer::POA_var poa,
+                                                 SALOME_NamingService_Abstract *ns,
+                                                 const char *xmlFilePath)
+: _rm(new ResourcesManager_cpp(xmlFilePath))
 {
   MESSAGE("SALOME_ResourcesManager constructor");
   _NS = ns;
@@ -90,7 +94,7 @@ SALOME_ResourcesManager::SALOME_ResourcesManager(CORBA::ORB_ptr orb, PortableSer
 
 SALOME_ResourcesManager::SALOME_ResourcesManager(CORBA::ORB_ptr orb, 
                                                  PortableServer::POA_var poa, 
-                                                 SALOME_NamingService *ns) : _rm()
+                                                 SALOME_NamingService_Abstract *ns) : _rm(new ResourcesManager_cpp())
 {
   MESSAGE("SALOME_ResourcesManager constructor");
   _NS = ns;
@@ -107,7 +111,8 @@ SALOME_ResourcesManager::SALOME_ResourcesManager(CORBA::ORB_ptr orb,
   PortableServer::ObjectId_var id = _poa->activate_object(this);
   CORBA::Object_var obj = _poa->id_to_reference(id);
   Engines::ResourcesManager_var refContMan = Engines::ResourcesManager::_narrow(obj);
-  _NS->Register(refContMan,_ResourcesManagerNameInNS);
+  if(_NS)
+    _NS->Register(refContMan,_ResourcesManagerNameInNS);
 
   MESSAGE("SALOME_ResourcesManager constructor end");
 }
@@ -133,40 +138,63 @@ SALOME_ResourcesManager::~SALOME_ResourcesManager()
 void SALOME_ResourcesManager::Shutdown()
 {
   MESSAGE("Shutdown");
+  if(!_NS)
+    return ;
   _NS->Destroy_Name(_ResourcesManagerNameInNS);
   PortableServer::ObjectId_var oid = _poa->servant_to_id(this);
   _poa->deactivate_object(oid);
 }
 
 /*!
- * Return list of resources available (regarding containt of CatalogResources.xml). And for each resource the number of proc available of it.
+ * Return list of resources available (regarding content of CatalogResources.xml) but select only those with canRunContainers attribute set to true.
+ * And for each resource the number of proc available of it.
+ * 
+ * \sa SALOME_ResourcesManager::ListAllResourcesInCatalog
  */
 void SALOME_ResourcesManager::ListAllAvailableResources(Engines::ResourceList_out machines, Engines::IntegerList_out nbProcsOfMachines)
 {
-  const MapOfParserResourcesType& zeList(_rm.GetList());
-  std::size_t sz(zeList.size());
-  std::vector<std::string> ret0(sz);
-  std::vector<int> ret1(sz);
+  const MapOfParserResourcesType& zeList(_rm->GetList());
+  std::vector<std::string> ret0;
+  std::vector<int> ret1;
+  for(MapOfParserResourcesType::const_iterator it=zeList.begin();it!=zeList.end();it++)
   {
-    std::size_t i(0);
-    for(MapOfParserResourcesType::const_iterator it=zeList.begin();it!=zeList.end();it++,i++)
-      {
-        const ParserResourcesType& elt((*it).second);
-        ret0[i]=elt.HostName;
-        //ret1[i]=elt.nbOfProc;
-        ret1[i]=elt.DataForSort._nbOfNodes*elt.DataForSort._nbOfProcPerNode;
-      }
+    const ParserResourcesType& elt((*it).second);
+    if(elt.can_run_containers)
+    {
+      ret0.push_back(elt.HostName);
+      ret1.push_back(elt.DataForSort._nbOfNodes*elt.DataForSort._nbOfProcPerNode);
+    }
   }
   machines=new Engines::ResourceList;
   nbProcsOfMachines=new Engines::IntegerList;
-  machines->length(sz); nbProcsOfMachines->length(sz);
+  std::size_t sz(ret0.size());
+  machines->length((CORBA::ULong)sz); nbProcsOfMachines->length((CORBA::ULong)sz);
   for(std::size_t j=0;j<sz;j++)
     {
-      (*machines)[j]=CORBA::string_dup(ret0[j].c_str());
-      (*nbProcsOfMachines)[j]=ret1[j];
+      (*machines)[(CORBA::ULong)j]=CORBA::string_dup(ret0[j].c_str());
+      (*nbProcsOfMachines)[(CORBA::ULong)j]=ret1[j];
     }
 }
 
+/*!
+ * Return list of resources available (regarding content of CatalogResources.xml) whatever canRunContainers attribute value.
+ * 
+ * \sa SALOME_ResourcesManager::ListAllAvailableResources
+ */
+Engines::ResourceList *SALOME_ResourcesManager::ListAllResourcesInCatalog()
+{
+  const MapOfParserResourcesType& zeList(_rm->GetList());
+  auto sz = zeList.size();
+  Engines::ResourceList *ret(new Engines::ResourceList);
+  ret->length( sz );
+  CORBA::ULong i(0);
+  for(auto it : zeList)
+  {
+    (*ret)[i++] = CORBA::string_dup( it.second.HostName.c_str() );
+  }
+  return ret;
+}
+
 //=============================================================================
 //! get the name of resources fitting the specified constraints (params)
 /*!
@@ -184,7 +212,7 @@ void SALOME_ResourcesManager::ListAllAvailableResources(Engines::ResourceList_ou
 Engines::ResourceList *
 SALOME_ResourcesManager::GetFittingResources(const Engines::ResourceParameters& params)
 {
-  MESSAGE("ResourcesManager::GetFittingResources");
+  //MESSAGE("ResourcesManager::GetFittingResources");
   Engines::ResourceList_var ret;
 
   // CORBA -> C++
@@ -193,7 +221,7 @@ SALOME_ResourcesManager::GetFittingResources(const Engines::ResourceParameters&
   try
   {
     // Call C++ ResourceManager
-    std::vector <std::string> vec = _rm.GetFittingResources(p);
+    std::vector <std::string> vec = _rm->GetFittingResources(p);
 
     // C++ -> CORBA
     ret = resourceList_CPPtoCORBA(vec);
@@ -219,7 +247,7 @@ SALOME_ResourcesManager::FindFirst(const Engines::ResourceList& listOfResources)
   // CORBA -> C++
   std::vector<std::string> rl = resourceList_CORBAtoCPP(listOfResources);
 
-  return CORBA::string_dup(_rm.Find("first", rl).c_str());
+  return CORBA::string_dup(_rm->Find("first", rl).c_str());
 }
 
 char *
@@ -228,7 +256,7 @@ SALOME_ResourcesManager::Find(const char* policy, const Engines::ResourceList& l
   // CORBA -> C++
   std::vector<std::string> rl = resourceList_CORBAtoCPP(listOfResources);
 
-  return CORBA::string_dup(_rm.Find(policy, rl).c_str());
+  return CORBA::string_dup(_rm->Find(policy, rl).c_str());
 }
 
 Engines::ResourceDefinition*
@@ -236,7 +264,7 @@ SALOME_ResourcesManager::GetResourceDefinition(const char * name)
 {
   Engines::ResourceDefinition_var resDef;
   try {
-    ParserResourcesType resource = _rm.GetResourcesDescr(name);
+    ParserResourcesType resource = _rm->GetResourcesDescr(name);
     resDef = resourceDefinition_CPPtoCORBA(resource);
   } catch (const exception & ex) {
     INFOS("Caught exception in GetResourceDefinition: " << ex.what());
@@ -254,12 +282,12 @@ SALOME_ResourcesManager::AddResource(const Engines::ResourceDefinition& new_reso
   try
   {
     ParserResourcesType resource = resourceDefinition_CORBAtoCPP(new_resource);
-    _rm.AddResourceInCatalog(resource);
+    _rm->AddResourceInCatalog(resource);
 
     if (write)
     {
-      _rm.WriteInXmlFile(std::string(xml_file));
-      _rm.ParseXmlFiles();
+      _rm->WriteInXmlFile(std::string(xml_file));
+      _rm->ParseXmlFiles();
     }
   }
   catch (const SALOME_Exception & e)
@@ -267,6 +295,11 @@ SALOME_ResourcesManager::AddResource(const Engines::ResourceDefinition& new_reso
     INFOS("Error in AddResourceInCatalog: " << e);
     THROW_SALOME_CORBA_EXCEPTION(e.what(), SALOME::BAD_PARAM);
   }
+  catch (const ResourcesException & e)
+  {
+    INFOS("Error in AddResourceInCatalog: " << e.msg);
+    THROW_SALOME_CORBA_EXCEPTION(e.msg.c_str(), SALOME::BAD_PARAM);
+  }
 }
 
 void
@@ -276,7 +309,7 @@ SALOME_ResourcesManager::RemoveResource(const char * resource_name,
 {
   try
   {
-    _rm.DeleteResourceInCatalog(resource_name);
+    _rm->DeleteResourceInCatalog(resource_name);
   }
   catch (const SALOME_Exception & e)
   {
@@ -286,8 +319,8 @@ SALOME_ResourcesManager::RemoveResource(const char * resource_name,
 
   if (write)
   {
-    _rm.WriteInXmlFile(std::string(xml_file));
-    _rm.ParseXmlFiles();
+    _rm->WriteInXmlFile(std::string(xml_file));
+    _rm->ParseXmlFiles();
   }
 }
 
@@ -301,7 +334,7 @@ SALOME_ResourcesManager::getMachineFile(const char * resource_name,
   if (std::string(parallelLib) == "Dummy")
   {
     MESSAGE("[getMachineFile] parallelLib is Dummy");
-    MapOfParserResourcesType resourcesList = _rm.GetList();
+    MapOfParserResourcesType resourcesList = _rm->GetList();
     if (resourcesList.find(std::string(resource_name)) != resourcesList.end())
     {
       ParserResourcesType resource = resourcesList[std::string(resource_name)];
@@ -360,7 +393,7 @@ SALOME_ResourcesManager::getMachineFile(const char * resource_name,
   {
     MESSAGE("[getMachineFile] parallelLib is Mpi");
 
-    MapOfParserResourcesType resourcesList = _rm.GetList();
+    MapOfParserResourcesType resourcesList = _rm->GetList();
     if (resourcesList.find(std::string(resource_name)) != resourcesList.end())
     {
       ParserResourcesType resource = resourcesList[std::string(resource_name)];
@@ -419,7 +452,7 @@ SALOME_ResourcesManager::getMachineFile(const char * resource_name,
         INFOS("[getMachineFile] Error resource_name MPI implementation was defined for " << resource_name);
       }
       else
-        INFOS("[getMachineFile] Error resource_name MPI implementation not currenly handled for " << resource_name);
+        INFOS("[getMachineFile] Error resource_name MPI implementation not currently handled for " << resource_name);
     }
     else
       INFOS("[getMachineFile] Error resource_name not found in resourcesList -> " << resource_name);