Version: 8.3.0
Engines_MPIContainer_i Class Reference

#include <MPIContainer_i.hxx>

Inheritance diagram for Engines_MPIContainer_i:

Public Member Functions

 Engines_MPIContainer_i (CORBA::ORB_ptr orb, PortableServer::POA_ptr poa, char *containerName, int argc, char *argv[])
 
 Engines_MPIContainer_i ()
 
 ~Engines_MPIContainer_i ()
 
void Shutdown ()
 Shutdown the container. More...
 
bool load_component_Library (const char *componentName, CORBA::String_out reason)
 load a component implementation More...
 
virtual
Engines::EngineComponent_ptr 
create_component_instance_env (const char *componentName, CORBA::Long studyId, const Engines::FieldsDict &env, CORBA::String_out reason)
 Create a new component instance with environment variables specified. More...
 
Engines::EngineComponent_ptr load_impl (const char *nameToRegister, const char *componentName)
 
void remove_impl (Engines::EngineComponent_ptr component_i)
 
void finalize_removal ()
 
virtual
Engines::EngineComponent_ptr 
create_component_instance (const char *componentName, CORBA::Long studyId)
 Create a new component instance. More...
 
virtual charcreate_python_service_instance (const char *CompName, CORBA::String_out reason)
 
Engines::EngineComponent_ptr find_component_instance (const char *registeredName, CORBA::Long studyId)
 Find an existing (in the container) component instance. More...
 
virtual void ping ()
 Ping the servant to check it is still alive. More...
 
charname ()
 Get container name. More...
 
charworkingdir ()
 Get container working directory. More...
 
charlogfilename ()
 Get container log file name. More...
 
void logfilename (const char *name)
 Set container log file name. More...
 
chargetHostName ()
 Get container host name. More...
 
CORBA::Long getPID ()
 Get container PID. More...
 
bool Kill_impl ()
 Kill current container. More...
 
Engines::fileRef_ptr createFileRef (const char *origFileName)
 Get or create a file reference object associated to a local file (to transfer it) More...
 
Engines::fileTransfer_ptr getFileTransfer ()
 Get a fileTransfer reference. More...
 
virtual Engines::Salome_file_ptr createSalome_file (const char *origFileName)
 Create a Salome file. More...
 
void copyFile (Engines::Container_ptr container, const char *remoteFile, const char *localFile)
 copy a file from a remote host (container) to the local host More...
 
Engines::PyNode_ptr createPyNode (const char *nodeName, const char *code)
 create a PyNode object to execute remote python code More...
 
Engines::PyNode_ptr getDefaultPyNode (const char *nodeName)
 Retrieves the last created PyNode instance with createPyNode. More...
 
Engines::PyScriptNode_ptr createPyScriptNode (const char *nodeName, const char *code)
 create a PyScriptNode object to execute remote python code More...
 
Engines::PyScriptNode_ptr getDefaultPyScriptNode (const char *nodeName)
 Retrieves the last created PyScriptNode instance with createPyScriptNode. More...
 
Engines::EngineComponent_ptr find_or_create_instance (std::string genericRegisterName, std::string componentLibraryName)
 Finds an already existing component instance or create a new instance. More...
 
bool load_component_CppImplementation (const char *componentName, std::string &reason)
 try to load a C++ component implementation More...
 
bool load_component_PythonImplementation (const char *componentName, std::string &reason)
 try to load a Python component implementation More...
 
bool load_component_ExecutableImplementation (const char *componentName, std::string &reason)
 try to load a Executable component implementation More...
 
Engines::EngineComponent_ptr createPythonInstance (std::string CompName, int studyId, std::string &error)
 Create a new component instance (Python implementation) More...
 
Engines::EngineComponent_ptr createExecutableInstance (std::string CompName, int studyId, const Engines::FieldsDict &env, std::string &error)
 Create a new component instance (Executable implementation) More...
 
Engines::EngineComponent_ptr createInstance (std::string genericRegisterName, void *handle, int studyId, std::string &error)
 Create a new component instance (C++ implementation) More...
 
int getArgc ()
 
char ** getArgv ()
 
void registerTemporaryFile (const std::string &fileName)
 
void unregisterTemporaryFile (const std::string &fileName)
 
void clearTemporaryFiles ()
 
Engines::IORTabtior ()
 
void tior (const Engines::IORTab &ior)
 

Static Public Member Functions

static bool isPythonContainer (const char *ContainerName)
 Indicate if container is a python one. More...
 
static void decInstanceCnt (std::string genericRegisterName)
 Decrement component instance reference count. More...
 

Protected Member Functions

void BCastIOR (CORBA::ORB_ptr orb, Engines::MPIObject_ptr pobj, bool amiCont)
 

Protected Attributes

bool _isSupervContainer
 
SALOME_NamingService_NS
 
std::string _library_path
 
std::string _containerName
 
std::string _logfilename
 
CORBA::ORB_var _orb
 
PortableServer::POA_var _poa
 
PortableServer::ObjectId * _id
 
int _numInstance
 
std::map< std::string,
Engines::EngineComponent_var > 
_listInstances_map
 
std::map< std::string,
Engines::fileRef_var > 
_fileRef_map
 
std::map< std::string,
Engines::Salome_file_var > 
_Salome_file_map
 
std::map< std::string,
Engines::PyScriptNode_var > 
_dftPyScriptNode
 
std::map< std::string,
Engines::PyNode_var > 
_dftPyNode
 
Utils_Mutex _mutexForDftPy
 
std::list< std::string > _tmp_files
 
Engines::fileTransfer_var _fileTransfer
 
int _argc
 
char ** _argv
 
long _pid
 
bool _isServantAloneInProcess
 
int _numproc
 
int _nbproc
 
Engines::IORTab_tior
 
std::map< std::string, MPI_Comm > _gcom
 

Static Protected Attributes

static std::map< std::string, int > _cntInstances_map
 
static std::map< std::string,
void * > 
_library_map
 
static std::map< std::string,
void * > 
_toRemove_map
 
static omni_mutex _numInstanceMutex
 

Private Member Functions

bool Lload_component_Library (const char *componentName)
 
Engines::EngineComponent_ptr Lcreate_component_instance (const char *componentName, CORBA::Long studyId)
 
Engines::EngineComponent_ptr Lload_impl (const char *nameToRegister, const char *componentName)
 
Engines::EngineComponent_ptr createMPIInstance (std::string genericRegisterName, void *handle, int studyId)
 

Constructor & Destructor Documentation

Engines_MPIContainer_i::Engines_MPIContainer_i ( )
Engines_MPIContainer_i::~Engines_MPIContainer_i ( void  )

References MPIObject_i::_numproc, and MESSAGE.

Member Function Documentation

void MPIObject_i::BCastIOR ( CORBA::ORB_ptr  orb,
Engines::MPIObject_ptr  pobj,
bool  amiCont 
)
protectedinherited
void Engines_Container_i::clearTemporaryFiles ( )
inherited
void Engines_Container_i::copyFile ( Engines::Container_ptr  container,
const char remoteFile,
const char localFile 
)
inherited

copy a file from a remote host (container) to the local host

Parameters
containerthe remote container
remoteFilethe file to copy locally from the remote host into localFile
localFilethe local file

References INFOS, and MESSAGE.

Engines::EngineComponent_ptr Engines_Container_i::create_component_instance ( const char genericRegisterName,
CORBA::Long  studyId 
)
virtualinherited

Create a new component instance.

CORBA method: Creates a new servant instance of a component. The servant registers itself to naming service and Registry.

Parameters
genericRegisterNameName of the component instance to register in Registry & Name Service (without _inst_n suffix)
studyId0 for multiStudy instance, study Id (>0) otherwise
Returns
a loaded component

References Engines_Container_i::create_component_instance_env().

Engines::EngineComponent_ptr Engines_MPIContainer_i::create_component_instance_env ( const char genericRegisterName,
CORBA::Long  studyId,
const Engines::FieldsDict env,
CORBA::String_out  reason 
)
virtual

Create a new component instance with environment variables specified.

CORBA method: Creates a new servant instance of a component. The servant registers itself to naming service and Registry.

Parameters
genericRegisterNameName of the component instance to register in Registry & Name Service (without _inst_n suffix)
studyId0 for multiStudy instance, study Id (>0) otherwise
envdict of env variables
reasonexplains error when create_component_instance_env fails
Returns
a loaded component

Reimplemented from Engines_Container_i.

References MPIObject_i::_nbproc, MPIObject_i::_numproc, MPIObject_i::_tior, thread_st::compoName, thread_st::ip, Lcreate_component_instance(), thread_st::studyId, th_createcomponentinstance(), and thread_st::tior.

char * Engines_Container_i::create_python_service_instance ( const char CompName,
CORBA::String_out  reason 
)
virtualinherited
Engines::EngineComponent_ptr Engines_Container_i::createExecutableInstance ( std::string  CompName,
int  studyId,
const Engines::FieldsDict env,
std::string &  reason 
)
inherited

Create a new component instance (Executable implementation)

Parameters
CompNameName of the component instance
studyId0 for multiStudy instance, study Id (>0) otherwise
envdict of env variables
reasonexplains error when creation fails
Returns
a loaded component

This component is implemented in an executable with name genericRegisterName.exe It must register itself in Naming Service. The container waits some time (10 s max) it's registration.

References Engines_Container_i::_containerName, Engines_Container_i::_listInstances_map, Engines_Container_i::_NS, Engines_Container_i::_numInstance, Engines_Container_i::_numInstanceMutex, Engines_Container_i::_orb, SALOME_NamingService::Destroy_Name(), INFOS, MESSAGE, and SALOME_NamingService::Resolve().

Referenced by Engines_Container_i::create_component_instance_env().

Engines::fileRef_ptr Engines_Container_i::createFileRef ( const char origFileName)
inherited

Get or create a file reference object associated to a local file (to transfer it)

CORBA method: get or create a fileRef object associated to a local file (a file on the computer on which runs the container server), which stores a list of (machine, localFileName) corresponding to copies already done.

Parameters
origFileNameabsolute path for a local file to copy on other computers
Returns
a fileRef object associated to the file.

References Engines_Container_i::_fileRef_map, Engines_Container_i::_id, Engines_Container_i::_numInstanceMutex, Engines_Container_i::_poa, ASSERT, and INFOS.

Engines::EngineComponent_ptr Engines_Container_i::createInstance ( std::string  genericRegisterName,
void *  handle,
int  studyId,
std::string &  reason 
)
inherited

Create a new component instance (C++ implementation)

C++ method: create a servant instance of a component.

Parameters
genericRegisterNameName of the component instance to register in Registry & Name Service, (without _inst_n suffix, like "COMPONENT")
handleloaded library handle
studyId0 for multiStudy instance, study Id (>0) otherwise
reasonexplains error when creation fails
Returns
a loaded component

example with names:

  • aGenRegisterName = COMPONENT (= first argument)
  • _containerName = /Containers/cli76ce/FactoryServer
  • factoryName = COMPONENTEngine_factory
  • component_registerBase = /Containers/cli76ce/FactoryServer/COMPONENT
  • instanceName = COMPONENT_inst_1
  • component_registerName = /Containers/cli76ce/FactoryServer/COMPONENT_inst_1

References Engines_Container_i::_cntInstances_map, Engines_Container_i::_containerName, Engines_Container_i::_id, Engines_Container_i::_listInstances_map, Engines_Container_i::_NS, Engines_Container_i::_numInstance, Engines_Container_i::_numInstanceMutex, Engines_Container_i::_orb, Engines_Container_i::_poa, ASSERT, INFOS, MESSAGE, SALOME_NamingService::Register(), SCRUTE, and Engines_Component_i::setStudyId().

Referenced by Engines_Container_i::create_component_instance_env(), and Engines_Container_i::find_or_create_instance().

Engines::PyNode_ptr Engines_Container_i::createPyNode ( const char nodeName,
const char code 
)
inherited

create a PyNode object to execute remote python code

Parameters
nodeNamethe name of the node
codethe python code to load
Returns
the PyNode

References Engines_Container_i::_dftPyNode, Engines_Container_i::_mutexForDftPy, Engines_Container_i::_orb, _pyCont, SALOME::INTERNAL_ERROR, SALOME::ExceptionStruct::text, and SALOME::ExceptionStruct::type.

Engines::PyScriptNode_ptr Engines_Container_i::createPyScriptNode ( const char nodeName,
const char code 
)
inherited

create a PyScriptNode object to execute remote python code

Parameters
nodeNamethe name of the node
codethe python code to load
Returns
the PyScriptNode

References Engines_Container_i::_dftPyScriptNode, Engines_Container_i::_mutexForDftPy, Engines_Container_i::_orb, _pyCont, SALOME::INTERNAL_ERROR, SALOME::ExceptionStruct::text, and SALOME::ExceptionStruct::type.

Engines::EngineComponent_ptr Engines_Container_i::createPythonInstance ( std::string  CompName,
int  studyId,
std::string &  reason 
)
inherited

Create a new component instance (Python implementation)

Parameters
CompNameName of the component instance
studyId0 for multiStudy instance, study Id (>0) otherwise
reasonexplains error when creation fails
Returns
a loaded component

References Engines_Container_i::_containerName, Engines_Container_i::_listInstances_map, Engines_Container_i::_numInstance, Engines_Container_i::_numInstanceMutex, Engines_Container_i::_orb, and _pyCont.

Referenced by Engines_Container_i::create_component_instance_env().

Engines::Salome_file_ptr Engines_Container_i::createSalome_file ( const char origFileName)
virtualinherited
void Engines_Container_i::decInstanceCnt ( std::string  genericRegisterName)
staticinherited
Engines::EngineComponent_ptr Engines_Container_i::find_component_instance ( const char registeredName,
CORBA::Long  studyId 
)
inherited

Find an existing (in the container) component instance.

CORBA method: Finds a servant instance of a component

Parameters
registeredNameName of the component in Registry or Name Service, without instance suffix number
studyId0 if instance is not associated to a study, >0 otherwise (== study id)
Returns
the first instance found with same studyId

References Engines_Container_i::_listInstances_map, and SCRUTE.

Engines::EngineComponent_ptr Engines_Container_i::find_or_create_instance ( std::string  genericRegisterName,
std::string  componentLibraryName 
)
inherited

Finds an already existing component instance or create a new instance.

C++ method: Finds an already existing servant instance of a component, or create an instance. -— USE ONLY FOR MULTISTUDY INSTANCES ! -----—

Parameters
genericRegisterNameName of the component instance to register in Registry & Name Service, (without _inst_n suffix, like "COMPONENT")
componentLibraryNamelike "libCOMPONENTEngine.so"
Returns
a loaded component

example with names:

  • aGenRegisterName = COMPONENT (= first argument)
  • impl_name = libCOMPONENTEngine.so (= second argument)
  • _containerName = /Containers/cli76ce/FactoryServer
  • factoryName = COMPONENTEngine_factory
  • component_registerBase = /Containers/cli76ce/FactoryServer/COMPONENT
  • instanceName = COMPONENT_inst_1
  • component_registerName = /Containers/cli76ce/FactoryServer/COMPONENT_inst_1

References Engines_Container_i::_containerName, Engines_Container_i::_library_map, Engines_Container_i::_NS, Engines_Container_i::_poa, ASSERT, Engines_Container_i::createInstance(), Engines_Component_i::getStudyId(), INFOS, MESSAGE, and SALOME_NamingService::ResolveFirst().

Referenced by Engines_Container_i::load_impl().

int Engines_Container_i::getArgc ( )
inherited
char** Engines_Container_i::getArgv ( )
inherited
Engines::PyNode_ptr Engines_Container_i::getDefaultPyNode ( const char nodeName)
inherited

Retrieves the last created PyNode instance with createPyNode.

References Engines_Container_i::_dftPyNode, and Engines_Container_i::_mutexForDftPy.

Engines::PyScriptNode_ptr Engines_Container_i::getDefaultPyScriptNode ( const char nodeName)
inherited

Retrieves the last created PyScriptNode instance with createPyScriptNode.

References Engines_Container_i::_dftPyScriptNode, and Engines_Container_i::_mutexForDftPy.

Engines::fileTransfer_ptr Engines_Container_i::getFileTransfer ( )
inherited

Get a fileTransfer reference.

CORBA method:

Returns
a reference to the fileTransfer object

References Engines_Container_i::_fileTransfer.

char * Engines_Container_i::getHostName ( )
inherited

Get container host name.

CORBA method: Get the hostName of the Container (without domain extensions)

References Kernel_Utils::GetHostname().

CORBA::Long Engines_Container_i::getPID ( )
inherited

Get container PID.

CORBA method: Get the PID (process identification) of the Container

bool Engines_Container_i::isPythonContainer ( const char ContainerName)
staticinherited

Indicate if container is a python one.

Retrieves only with container naming convention if it is a python container

bool Engines_Container_i::Kill_impl ( )
inherited

Kill current container.

Kill the container.

CORBA method: Kill the container process with exit(0). To remove : never returns !

References Engines_Container_i::_containerName, ASSERT, Kernel_Utils::GetHostname(), INFOS, and MESSAGE.

bool Engines_Container_i::load_component_CppImplementation ( const char componentName,
std::string &  reason 
)
inherited

try to load a C++ component implementation

C++ method:

Parameters
componentNamethe name of the component (COMPONENT, for example)
reasonexplains error when load fails
Returns
true if loading is successfull or already done, false otherwise

References Engines_Container_i::_library_map, Engines_Container_i::_numInstanceMutex, Engines_Container_i::_toRemove_map, ENGINESO, findpathof(), LIB, MESSAGE, SCRUTE, and SEP.

Referenced by Engines_Container_i::load_component_Library().

bool Engines_Container_i::load_component_ExecutableImplementation ( const char componentName,
std::string &  reason 
)
inherited

try to load a Executable component implementation

C++ method:

Parameters
componentNamename of the component
reasonexplains error when load fails
Returns
true if loading is successfull or already done, false otherwise

References Engines_Container_i::_library_map, Engines_Container_i::_numInstanceMutex, checkifexecutable(), findpathof(), and MESSAGE.

Referenced by Engines_Container_i::load_component_Library().

bool Engines_MPIContainer_i::load_component_Library ( const char componentName,
CORBA::String_out  reason 
)
virtual

load a component implementation

CORBA method

Parameters
componentNamecomponent name
reasonexplains error when load fails
Returns
true if dlopen successfull or already done, false otherwise

Reimplemented from Engines_Container_i.

References MPIObject_i::_nbproc, MPIObject_i::_numproc, MPIObject_i::_tior, thread_st::compoName, thread_st::ip, Lload_component_Library(), th_loadcomponentlibrary(), and thread_st::tior.

bool Engines_Container_i::load_component_PythonImplementation ( const char componentName,
std::string &  reason 
)
inherited

try to load a Python component implementation

C++ method:

Parameters
componentNamename of the component
reasonexplains error when load fails
Returns
true if loading is successfull or already done, false otherwise

References Engines_Container_i::_library_map, Engines_Container_i::_numInstanceMutex, _pyCont, MESSAGE, and SCRUTE.

Referenced by Engines_Container_i::load_component_Library().

Engines::EngineComponent_ptr Engines_MPIContainer_i::load_impl ( const char nameToRegister,
const char componentName 
)
char * Engines_Container_i::logfilename ( )
inherited

Get container log file name.

CORBA attribute: Container log file name

References Engines_Container_i::_logfilename.

void Engines_Container_i::logfilename ( const char name)
inherited

Set container log file name.

References Engines_Container_i::_logfilename, and Engines_Container_i::name().

char * Engines_Container_i::name ( )
inherited

Get container name.

CORBA attribute: Container name (see constructor)

References Engines_Container_i::_containerName.

Referenced by Engines_Container_i::logfilename().

void Engines_Container_i::ping ( )
virtualinherited

Ping the servant to check it is still alive.

CORBA method: check if servant is still alive

References MESSAGE.

void Engines_Container_i::registerTemporaryFile ( const std::string &  fileName)
inherited
void Engines_MPIContainer_i::Shutdown ( )
virtual

Shutdown the container.

CORBA method, oneway: Server shutdown.

  • Container name removed from naming service,
  • servant deactivation,
  • orb shutdown if no other servants in the process

Reimplemented from Engines_Container_i.

References Engines_Container_i::_containerName, Engines_Container_i::_listInstances_map, MPIObject_i::_nbproc, Engines_Container_i::_NS, MPIObject_i::_numproc, Engines_Container_i::_orb, MPIObject_i::_tior, SALOME_NamingService::Destroy_FullDirectory(), SALOME_NamingService::Destroy_Name(), and MESSAGE.

Engines::IORTab * MPIObject_i::tior ( )
inherited

References MPIObject_i::_tior.

Referenced by MPIObject_i::BCastIOR().

void MPIObject_i::tior ( const Engines::IORTab ior)
inherited

References MPIObject_i::_tior.

void Engines_Container_i::unregisterTemporaryFile ( const std::string &  fileName)
inherited
char * Engines_Container_i::workingdir ( )
inherited

Get container working directory.

CORBA attribute: Container working directory

Field Documentation

int Engines_Container_i::_argc
protectedinherited
char** Engines_Container_i::_argv
protectedinherited
std::map< std::string, int > Engines_Container_i::_cntInstances_map
staticprotectedinherited
std::map<std::string,Engines::PyNode_var> Engines_Container_i::_dftPyNode
protectedinherited
std::map<std::string,Engines::PyScriptNode_var> Engines_Container_i::_dftPyScriptNode
protectedinherited
std::map<std::string,Engines::fileRef_var> Engines_Container_i::_fileRef_map
protectedinherited
Engines::fileTransfer_var Engines_Container_i::_fileTransfer
protectedinherited
std::map<std::string, MPI_Comm> MPIObject_i::_gcom
protectedinherited
bool Engines_Container_i::_isServantAloneInProcess
protectedinherited
bool Engines_Container_i::_isSupervContainer
protectedinherited
std::string Engines_Container_i::_library_path
protectedinherited
std::string Engines_Container_i::_logfilename
protectedinherited
long Engines_Container_i::_pid
protectedinherited
std::map<std::string,Engines::Salome_file_var> Engines_Container_i::_Salome_file_map
protectedinherited
std::list<std::string> Engines_Container_i::_tmp_files
protectedinherited
std::map< std::string, void * > Engines_Container_i::_toRemove_map
staticprotectedinherited