-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 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
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <list>
#include <sys/types.h>
#include <sys/stat.h>
-#ifdef WNT
+#ifdef WIN32
#else
#include <unistd.h>
#endif
#include <algorithm>
-#include "Utils_SALOME_Exception.hxx"
-
#define MAX_SIZE_FOR_HOSTNAME 256;
using namespace std;
static LoadRateManagerFirst first;
static LoadRateManagerCycl cycl;
static LoadRateManagerAltCycl altcycl;
+
+resourceParams::resourceParams()
+: can_launch_batch_jobs(false),
+ can_run_containers(false),
+ nb_proc(-1),
+ nb_node(-1),
+ nb_proc_per_node(-1),
+ cpu_clock(-1),
+ mem_mb(-1)
+{
+}
+
//=============================================================================
/*!
* just for test
void
ResourcesManager_cpp::AddResourceInCatalog(const ParserResourcesType & new_resource)
{
- if (new_resource.Name == DEFAULT_RESOURCE_NAME)
- throw SALOME_Exception((string("Cannot modify default local resource \"") +
- DEFAULT_RESOURCE_NAME + "\"").c_str());
+ if (new_resource.Name == DEFAULT_RESOURCE_NAME){
+ std::string error("Cannot modify default local resource \"" + DEFAULT_RESOURCE_NAME + "\"");
+ throw ResourcesException(error);
+ }
// TODO - Add minimal check
_resourcesList[new_resource.Name] = new_resource;
}
void ResourcesManager_cpp::DeleteResourceInCatalog(const char * name)
{
- if (DEFAULT_RESOURCE_NAME == name)
- throw SALOME_Exception((string("Cannot delete default local resource \"") +
- DEFAULT_RESOURCE_NAME + "\"").c_str());
+ if (DEFAULT_RESOURCE_NAME == name){
+ std::string error("Cannot delete default local resource \"" + DEFAULT_RESOURCE_NAME + "\"");
+ throw ResourcesException(error);
+ }
MapOfParserResourcesType_it it = _resourcesList.find(name);
if (it != _resourcesList.end())
_resourcesList.erase(name);
{
MapOfParserResourcesType _resourcesList_tmp;
MapOfParserResourcesType _resourcesBatchList_tmp;
- SALOME_ResourcesCatalog_Handler* handler =
- new SALOME_ResourcesCatalog_Handler(_resourcesList_tmp);
- const char* aFilePath = (*_path_resources_it).c_str();
+ SALOME_ResourcesCatalog_Handler *handler( new SALOME_ResourcesCatalog_Handler(_resourcesList_tmp) );
+ const char *aFilePath( (*_path_resources_it).c_str() );
FILE* aFile = fopen(aFilePath, "r");
if (aFile != NULL)
for (MapOfParserResourcesType_it i = _resourcesList_tmp.begin(); i != _resourcesList_tmp.end(); ++i)
{
MapOfParserResourcesType_it j = _resourcesList.find(i->first);
- if (i->second.HostName == "localhost" || i->second.HostName == Kernel_Utils::GetHostname())
+ if (i->second.HostName == DEFAULT_RESOURCE_NAME || i->second.HostName == Kernel_Utils::GetHostname())
{
+ MapOfParserResourcesType_it it0(_resourcesList.find(DEFAULT_RESOURCE_NAME));
+ if(it0!=_resourcesList.end())
+ {
+ ParserResourcesType& localhostElt((*it0).second);
+ localhostElt.DataForSort._nbOfNodes=(*i).second.DataForSort._nbOfNodes;
+ localhostElt.DataForSort._nbOfProcPerNode=(*i).second.DataForSort._nbOfProcPerNode;
+ localhostElt.DataForSort._CPUFreqMHz=(*i).second.DataForSort._CPUFreqMHz;
+ localhostElt.DataForSort._memInMB=(*i).second.DataForSort._memInMB;
+ }
RES_MESSAGE("Resource " << i->first << " is not added because it is the same "
"machine as default local resource \"" << DEFAULT_RESOURCE_NAME << "\"");
}
return _resourcesList;
}
-std::string ResourcesManager_cpp::Find(const std::string& policy, const std::vector<std::string>& listOfResources)
+//! threadsafe
+std::string ResourcesManager_cpp::Find(const std::string& policy, const std::vector<std::string>& listOfResources) const
{
- if(_resourceManagerMap.count(policy)==0)
- return _resourceManagerMap[""]->Find(listOfResources, _resourcesList);
- return _resourceManagerMap[policy]->Find(listOfResources, _resourcesList);
+ std::map<std::string , LoadRateManager*>::const_iterator it(_resourceManagerMap.find(policy));
+ if(it==_resourceManagerMap.end())
+ {
+ it=_resourceManagerMap.find("");
+ return ((*it).second)->Find(listOfResources, _resourcesList);
+ }
+ return ((*it).second)->Find(listOfResources, _resourcesList);
}
//=============================================================================
resources=kept_resources;
}
-
-ParserResourcesType
-ResourcesManager_cpp::GetResourcesDescr(const std::string & name)
+//! thread safe
+ParserResourcesType ResourcesManager_cpp::GetResourcesDescr(const std::string & name) const
{
- if (_resourcesList.find(name) != _resourcesList.end())
- return _resourcesList[name];
+ MapOfParserResourcesType::const_iterator it(_resourcesList.find(name));
+ if (it != _resourcesList.end())
+ return (*it).second;
else
{
std::string error("[GetResourcesDescr] Resource does not exist: ");
{
resource.AppliPath = string(getenv("HOME")) + "/" + getenv("APPLI");
}
- resource.working_directory = "/tmp/salome_localres_workdir";
+ string tmpdir = "/tmp";
+ if (getenv("TMPDIR") != NULL)
+ tmpdir = getenv("TMPDIR");
+ resource.working_directory = tmpdir + "/salome_localres_workdir";
+ if (getenv("USER") != NULL)
+ resource.working_directory += string("_") + getenv("USER");
resource.can_launch_batch_jobs = true;
resource.can_run_containers = true;
_resourcesList[resource.Name] = resource;