Version: 8.3.0
Engines_Parallel_Container_i Class Reference

C++ implementation of Engines::Container interface for parallel container implemented with PaCO++. More...

#include <SALOME_ParallelContainer_i.hxx>

Inheritance diagram for Engines_Parallel_Container_i:

Public Member Functions

 Engines_Parallel_Container_i (CORBA::ORB_ptr orb, char *ior, int rank, PortableServer::POA_ptr poa, std::string containerName, bool isServantAloneInProcess=true)
 Construtor. More...
 
virtual ~Engines_Parallel_Container_i ()
 Destructor. More...
 
virtual bool load_component_Library (const char *componentName, CORBA::String_out reason)
 load a new component class More...
 
virtual
Engines::EngineComponent_ptr 
create_component_instance (const char *componentName, CORBA::Long studyId)
 Create a new component instance. 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. 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...
 
Engines::EngineComponent_ptr load_impl (const char *nameToRegister, const char *componentName)
 Find or create a new component instance. More...
 
void create_paco_component_node_instance (const char *componentName, const char *proxy_containerName, CORBA::Long studyId)
 
void updateInstanceNumber ()
 
void remove_impl (Engines::EngineComponent_ptr component_i)
 Remove the component instance from container. More...
 
void finalize_removal ()
 Unload component libraries from the container. 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...
 
virtual void Shutdown ()
 Shutdown the container. More...
 
chargetHostName ()
 Get container host name. More...
 
CORBA::Long getPID ()
 Get container PID. More...
 
bool Kill_impl ()
 Kill current container. More...
 
Engines::EngineComponent_ptr find_or_create_instance (std::string genericRegisterName)
 Finds an already existing component instance or create a new instance. More...
 
Engines::EngineComponent_ptr createCPPInstance (std::string genericRegisterName, void *handle, int studyId)
 Create a new CPP component instance. More...
 
Engines::EngineComponent_ptr createPythonInstance (std::string genericRegisterName, int studyId)
 Create a new Python component instance. More...
 
void set_id (PortableServer::ObjectId *id)
 
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 ()
 CORBA method: More...
 
virtual Engines::Salome_file_ptr createSalome_file (const char *origFileName)
 
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)
 
Engines::PyScriptNode_ptr createPyScriptNode (const char *nodeName, const char *code)
 
Engines::PyScriptNode_ptr getDefaultPyScriptNode (const char *nodeName)
 

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 Types

typedef std::map< std::string,
Engines::EngineComponent_var > 
_listInstances_map_t
 
typedef std::map< std::string,
Engines::fileRef_var > 
_fileRef_map_t
 
typedef std::map< std::string,
Engines::Salome_file_var > 
_Salome_file_map_t
 
typedef
PortableServer::ObjectId *(* 
FACTORY_FUNCTION )(CORBA::ORB_ptr, char *, int, PortableServer::POA_ptr, PortableServer::ObjectId *, const char *, const char *)
 

Protected Attributes

SALOME_NamingService_NS
 
std::string _hostname
 
std::string _library_path
 
std::string _containerName
 
std::string _logfilename
 
CORBA::ORB_var _orb
 
PortableServer::POA_var _poa
 
PortableServer::ObjectId * _id
 
int _numInstance
 
CORBA::Long _pid
 
bool _isServantAloneInProcess
 
Engines::fileTransfer_var _fileTransfer
 
_listInstances_map_t _listInstances_map
 
_fileRef_map_t _fileRef_map
 
_Salome_file_map_t _Salome_file_map
 
std::map< std::string,
PortableServer::ObjectId * > 
_par_obj_inst_map
 

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
 

Detailed Description

C++ implementation of Engines::Container interface for parallel container implemented with PaCO++.

Member Typedef Documentation

typedef std::map<std::string,Engines::fileRef_var> Engines_Parallel_Container_i::_fileRef_map_t
protected
typedef std::map<std::string,Engines::EngineComponent_var> Engines_Parallel_Container_i::_listInstances_map_t
protected
typedef std::map<std::string,Engines::Salome_file_var> Engines_Parallel_Container_i::_Salome_file_map_t
protected
typedef PortableServer::ObjectId*(* Engines_Parallel_Container_i::FACTORY_FUNCTION)(CORBA::ORB_ptr, char *, int, PortableServer::POA_ptr, PortableServer::ObjectId *, const char *, const char *)
protected

Constructor & Destructor Documentation

Engines_Parallel_Container_i::Engines_Parallel_Container_i ( CORBA::ORB_ptr  orb,
char ior,
int  rank,
PortableServer::POA_ptr  poa,
std::string  containerName,
bool  isServantAloneInProcess = true 
)
Engines_Parallel_Container_i::~Engines_Parallel_Container_i ( )
virtual

Destructor.

References _id, _NS, and MESSAGE.

Member Function Documentation

void Engines_Parallel_Container_i::copyFile ( Engines::Container_ptr  container,
const char remoteFile,
const char localFile 
)

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, MESSAGE, and SCRUTE.

Engines::EngineComponent_ptr Engines_Parallel_Container_i::create_component_instance ( const char genericRegisterName,
CORBA::Long  studyId 
)
virtual

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 create_component_instance_env().

Referenced by find_or_create_instance().

Engines::EngineComponent_ptr Engines_Parallel_Container_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.

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 environment variables
Returns
a loaded component

References ParallelGlobalProcessVar_i::_library_map, _numInstance, ParallelGlobalProcessVar_i::_numInstanceMutex, createCPPInstance(), createPythonInstance(), INFOS, and MESSAGE.

Referenced by create_component_instance().

void Engines_Parallel_Container_i::create_paco_component_node_instance ( const char componentName,
const char proxy_containerName,
CORBA::Long  studyId 
)
char * Engines_Parallel_Container_i::create_python_service_instance ( const char CompName,
CORBA::String_out  reason 
)
virtual
Engines::EngineComponent_ptr Engines_Parallel_Container_i::createCPPInstance ( std::string  genericRegisterName,
void *  handle,
int  studyId 
)

Create a new CPP component instance.

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
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 ParallelGlobalProcessVar_i::_cntInstances_map, _containerName, _id, _listInstances_map, _NS, _numInstance, _orb, _poa, ASSERT, INFOS, MESSAGE, SALOME_NamingService::Register(), and Engines_Component_i::setStudyId().

Referenced by create_component_instance_env().

Engines::fileRef_ptr Engines_Parallel_Container_i::createFileRef ( const char origFileName)

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 _fileRef_map, _id, ParallelGlobalProcessVar_i::_numInstanceMutex, _poa, ASSERT, and INFOS.

Engines::PyNode_ptr Engines_Parallel_Container_i::createPyNode ( const char nodeName,
const char code 
)

create a PyNode object to execute remote python code

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

References INFOS.

Engines::PyScriptNode_ptr Engines_Parallel_Container_i::createPyScriptNode ( const char nodeName,
const char code 
)

References INFOS.

Engines::EngineComponent_ptr Engines_Parallel_Container_i::createPythonInstance ( std::string  genericRegisterName,
int  studyId 
)

Create a new Python component instance.

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
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 _containerName, _listInstances_map, _numInstance, _orb, Py_ACQUIRE_NEW_THREAD, and Py_RELEASE_NEW_THREAD.

Referenced by create_component_instance_env().

Engines::Salome_file_ptr Engines_Parallel_Container_i::createSalome_file ( const char origFileName)
virtual
void Engines_Parallel_Container_i::finalize_removal ( )

Unload component libraries from the container.

CORBA method: Discharges unused libraries from the container.

References ParallelGlobalProcessVar_i::_numInstanceMutex, ParallelGlobalProcessVar_i::_toRemove_map, and MESSAGE.

Engines::EngineComponent_ptr Engines_Parallel_Container_i::find_component_instance ( const char registeredName,
CORBA::Long  studyId 
)

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 _listInstances_map, and SCRUTE.

Engines::EngineComponent_ptr Engines_Parallel_Container_i::find_or_create_instance ( std::string  genericRegisterName)

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")
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 _containerName, _NS, _poa, ASSERT, create_component_instance(), Engines_Component_i::getStudyId(), INFOS, and SALOME_NamingService::ResolveFirst().

Referenced by load_impl().

Engines::PyNode_ptr Engines_Parallel_Container_i::getDefaultPyNode ( const char nodeName)

References INFOS.

Engines::PyScriptNode_ptr Engines_Parallel_Container_i::getDefaultPyScriptNode ( const char nodeName)

References INFOS.

Engines::fileTransfer_ptr Engines_Parallel_Container_i::getFileTransfer ( )

CORBA method:

Returns
a reference to the fileTransfer object

References _fileTransfer.

char * Engines_Parallel_Container_i::getHostName ( )

Get container host name.

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

References _hostname, and MESSAGE.

CORBA::Long Engines_Parallel_Container_i::getPID ( )

Get container PID.

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

References _pid, and MESSAGE.

bool Engines_Parallel_Container_i::isPythonContainer ( const char ContainerName)
static

Indicate if container is a python one.

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

bool Engines_Parallel_Container_i::Kill_impl ( )

Kill current container.

Kill the container.

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

References _containerName, _hostname, _pid, ASSERT, INFOS, and MESSAGE.

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

load a new component class

CORBA method: load a new component class (Python or C++ implementation)

Parameters
componentNamelike COMPONENT try to make a Python import of COMPONENT, then a lib open of libCOMPONENTEngine.so
Returns
true if dlopen successfull or already done, false otherwise

References ParallelGlobalProcessVar_i::_library_map, ParallelGlobalProcessVar_i::_numInstanceMutex, ParallelGlobalProcessVar_i::_toRemove_map, MESSAGE, Py_ACQUIRE_NEW_THREAD, and Py_RELEASE_NEW_THREAD.

Referenced by load_impl().

Engines::EngineComponent_ptr Engines_Parallel_Container_i::load_impl ( const char genericRegisterName,
const char componentName 
)

Find or create a new component instance.

CORBA method: find or create an instance of the component (servant), load a new component class (dynamic library) if required, -— FOR COMPATIBILITY WITH 2.2 -— -— USE ONLY FOR MULTISTUDY INSTANCES ! -----— The servant registers itself to naming service and Registry.

Parameters
genericRegisterNameName of the component to register in Registry & Name Service
componentNameName of the constructed library of the component
Returns
a loaded component

References find_or_create_instance(), and load_component_Library().

char * Engines_Parallel_Container_i::logfilename ( )

Get container log file name.

CORBA attribute: Container log file name

References _logfilename.

void Engines_Parallel_Container_i::logfilename ( const char name)

Set container log file name.

References _logfilename, and name().

char * Engines_Parallel_Container_i::name ( )

Get container name.

CORBA attribute: Container name (see constructor)

References _containerName.

Referenced by logfilename().

void Engines_Parallel_Container_i::ping ( )
virtual

Ping the servant to check it is still alive.

CORBA method: check if servant is still alive

References _pid, and MESSAGE.

void Engines_Parallel_Container_i::remove_impl ( Engines::EngineComponent_ptr  component_i)

Remove the component instance from container.

CORBA method: Stops the component servant, and deletes all related objects

Parameters
component_iComponent to be removed

References _listInstances_map, _NS, ParallelGlobalProcessVar_i::_numInstanceMutex, ASSERT, SALOME_NamingService::Destroy_Name(), and MESSAGE.

void Engines_Parallel_Container_i::set_id ( PortableServer::ObjectId *  id)
void Engines_Parallel_Container_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

References _containerName, _isServantAloneInProcess, _listInstances_map, _NS, _orb, _par_obj_inst_map, _poa, SALOME_NamingService::Destroy_FullDirectory(), SALOME_NamingService::Destroy_Name(), and MESSAGE.

void Engines_Parallel_Container_i::updateInstanceNumber ( )
char * Engines_Parallel_Container_i::workingdir ( )

Get container working directory.

CORBA attribute: Container working directory

Field Documentation

std::map< std::string, int > ParallelGlobalProcessVar_i::_cntInstances_map
staticprotectedinherited
_fileRef_map_t Engines_Parallel_Container_i::_fileRef_map
protected

Referenced by createFileRef().

Engines::fileTransfer_var Engines_Parallel_Container_i::_fileTransfer
protected
std::string Engines_Parallel_Container_i::_hostname
protected
PortableServer::ObjectId* Engines_Parallel_Container_i::_id
protected
bool Engines_Parallel_Container_i::_isServantAloneInProcess
protected

Referenced by Shutdown().

std::string Engines_Parallel_Container_i::_library_path
protected
_listInstances_map_t Engines_Parallel_Container_i::_listInstances_map
protected
std::string Engines_Parallel_Container_i::_logfilename
protected

Referenced by logfilename().

CORBA::ORB_var Engines_Parallel_Container_i::_orb
protected
std::map<std::string, PortableServer::ObjectId *> Engines_Parallel_Container_i::_par_obj_inst_map
protected
CORBA::Long Engines_Parallel_Container_i::_pid
protected
PortableServer::POA_var Engines_Parallel_Container_i::_poa
protected
_Salome_file_map_t Engines_Parallel_Container_i::_Salome_file_map
protected

Referenced by createSalome_file().

std::map< std::string, void * > ParallelGlobalProcessVar_i::_toRemove_map
staticprotectedinherited