-// 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
*/
//=============================================================================
-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;
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;
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");
}
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<std::string> ret0;
+ std::vector<int> 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;j<sz;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)
/*!
Engines::ResourceList *
SALOME_ResourcesManager::GetFittingResources(const Engines::ResourceParameters& params)
{
- MESSAGE("ResourcesManager::GetFittingResources");
+ //MESSAGE("ResourcesManager::GetFittingResources");
Engines::ResourceList_var ret;
// CORBA -> C++
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);
// 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 *
// 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*
{
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());
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)
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
{
try
{
- _rm.DeleteResourceInCatalog(resource_name);
+ _rm->DeleteResourceInCatalog(resource_name);
}
catch (const SALOME_Exception & e)
{
if (write)
{
- _rm.WriteInXmlFile(std::string(xml_file));
- _rm.ParseXmlFiles();
+ _rm->WriteInXmlFile(std::string(xml_file));
+ _rm->ParseXmlFiles();
}
}
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)];
{
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)];
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);