X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FResourcesManager%2FSALOME_ResourcesManager.cxx;h=15c8dc5be0199523e721fa5a455c0c07335598d6;hb=a2a0259f365527779b76fe3231d64f52552d4a0a;hp=39fb434bfd4aea91fe7643240075427a3f01fd90;hpb=703cf8ca778de35a6b463d4b4fca7c36697d717f;p=modules%2Fkernel.git diff --git a/src/ResourcesManager/SALOME_ResourcesManager.cxx b/src/ResourcesManager/SALOME_ResourcesManager.cxx index 39fb434bf..15c8dc5be 100644 --- a/src/ResourcesManager/SALOME_ResourcesManager.cxx +++ b/src/ResourcesManager/SALOME_ResourcesManager.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2023 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 @@ -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,11 +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 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::vector ret0; + std::vector ret1; + for(MapOfParserResourcesType::const_iterator it=zeList.begin();it!=zeList.end();it++) + { + 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; + std::size_t sz(ret0.size()); + machines->length((CORBA::ULong)sz); nbProcsOfMachines->length((CORBA::ULong)sz); + for(std::size_t j=0;jGetList()); + 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) /*! @@ -155,7 +212,7 @@ void SALOME_ResourcesManager::Shutdown() Engines::ResourceList * SALOME_ResourcesManager::GetFittingResources(const Engines::ResourceParameters& params) { - MESSAGE("ResourcesManager::GetFittingResources"); + //MESSAGE("ResourcesManager::GetFittingResources"); Engines::ResourceList_var ret; // CORBA -> C++ @@ -164,7 +221,7 @@ SALOME_ResourcesManager::GetFittingResources(const Engines::ResourceParameters& try { // Call C++ ResourceManager - std::vector vec = _rm.GetFittingResources(p); + std::vector vec = _rm->GetFittingResources(p); // C++ -> CORBA ret = resourceList_CPPtoCORBA(vec); @@ -190,7 +247,7 @@ SALOME_ResourcesManager::FindFirst(const Engines::ResourceList& listOfResources) // CORBA -> C++ std::vector 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 * @@ -199,7 +256,7 @@ SALOME_ResourcesManager::Find(const char* policy, const Engines::ResourceList& l // CORBA -> C++ std::vector 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* @@ -207,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()); @@ -225,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) @@ -238,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 @@ -247,7 +309,7 @@ SALOME_ResourcesManager::RemoveResource(const char * resource_name, { try { - _rm.DeleteResourceInCatalog(resource_name); + _rm->DeleteResourceInCatalog(resource_name); } catch (const SALOME_Exception & e) { @@ -257,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(); } } @@ -272,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)]; @@ -331,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)]; @@ -390,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);