Version: 9.16.0
YACS::ENGINE::SalomeContainerToolsBase Class Referenceabstract

#include <SalomeContainerTools.hxx>

Inheritance diagram for YACS::ENGINE::SalomeContainerToolsBase:

Public Member Functions

virtual ~SalomeContainerToolsBase ()
 
virtual std::string getProperty (const std::string &name) const =0
 
virtual void setProperty (const std::string &name, const std::string &value)=0
 
virtual const std::map< std::string, std::string > & getProperties () const =0
 
virtual std::map< std::string, std::string > getResourceProperties (const std::string &name) const =0
 
virtual void clearProperties ()=0
 
virtual void addToComponentList (const std::string &name)=0
 
virtual void addToResourceList (const std::string &name)=0
 
virtual Engines::ContainerParameters getParameters () const =0
 
virtual void setContainerName (const std::string &name)=0
 
virtual std::string getHostName () const =0
 
virtual std::string getNotNullContainerName (const Container *contPtr, const Task *askingNode, bool &isEmpty) const =0
 
virtual std::string getContainerName () const =0
 
virtual int getNumberOfCoresPerWorker () const =0
 

Static Public Member Functions

static void SetContainerNameOf (Engines::ContainerParameters &params, const std::string &name)
 
static void Start (const std::vector< std::string > &compoNames, SalomeContainerHelper *schelp, SalomeContainerToolsBase &sct, int &shutdownLevel, const Container *cont, const Task *askingNode)
 
static CORBA::Object_ptr LoadComponent (SalomeContainerHelper *launchModeType, Container *cont, Task *askingNode)
 
static CORBA::Object_ptr CreateComponentInstance (Container *cont, Engines::Container_ptr contPtr, const ComponentInstance *inst)
 
static std::string GetPlacementId (const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode)
 
static std::string GetFullPlacementId (const SalomeContainerHelper *launchModeType, const Container *cont, const Task *askingNode)
 

Detailed Description

Definition at line 39 of file SalomeContainerTools.hxx.

Constructor & Destructor Documentation

◆ ~SalomeContainerToolsBase()

virtual YACS::ENGINE::SalomeContainerToolsBase::~SalomeContainerToolsBase ( )
inlinevirtual

Definition at line 42 of file SalomeContainerTools.hxx.

42{ }

Member Function Documentation

◆ addToComponentList()

virtual void YACS::ENGINE::SalomeContainerToolsBase::addToComponentList ( const std::string &  name)
pure virtual

◆ addToResourceList()

virtual void YACS::ENGINE::SalomeContainerToolsBase::addToResourceList ( const std::string &  name)
pure virtual

◆ clearProperties()

virtual void YACS::ENGINE::SalomeContainerToolsBase::clearProperties ( )
pure virtual

◆ CreateComponentInstance()

CORBA::Object_ptr SalomeContainerToolsBase::CreateComponentInstance ( Container cont,
Engines::Container_ptr  contPtr,
const ComponentInstance inst 
)
static

Definition at line 475 of file SalomeContainerTools.cxx.

476{
477 if(!inst)
478 throw Exception("SalomeContainerToolsBase::CreateComponentInstance : no instance of component in the task requesting for a load of its component !");
479 char *reason(0);
480 std::string compoName(inst->getCompoName());
481 CORBA::Object_ptr objComponent=CORBA::Object::_nil();
482 Proc* p(cont->getProc());
483 // prepare component instance properties
484 Engines::FieldsDict_var env(new Engines::FieldsDict);
485 std::map<std::string, std::string> properties(inst->getProperties());
486 if(p)
487 {
488 std::map<std::string,std::string> procMap=p->getProperties();
489 properties.insert(procMap.begin(),procMap.end());
490 }
491
492 std::map<std::string, std::string>::const_iterator itm;
493 env->length(properties.size());
494 int item=0;
495 for(itm = properties.begin(); itm != properties.end(); ++itm, item++)
496 {
497 DEBUG_YACSTRACE("envname="<<itm->first<<" envvalue="<< itm->second);
498 env[item].key= CORBA::string_dup(itm->first.c_str());
499 env[item].value <<= itm->second.c_str();
500 }
501
502 objComponent=contPtr->create_component_instance_env(compoName.c_str(), env, reason);
503 if(CORBA::is_nil(objComponent))
504 {
505 std::string text="Error while trying to create a new component: component '"+ compoName;
506 text=text+"' is not installed or it's a wrong name";
507 text += '\n';
508 text += reason;
509 CORBA::string_free(reason);
510 throw Exception(text);
511 }
512 return objComponent;
513}
#define DEBUG_YACSTRACE(msg)
Definition: YacsTrace.hxx:53
const std::string & getCompoName() const
std::map< std::string, std::string > getProperties()
Definition: Node.cxx:509
Base class for all schema objects.
Definition: Proc.hxx:44
std::map< std::string, std::string > getProperties() const
Proc * p
Definition: driver.cxx:216

References DEBUG_YACSTRACE, YACS::ENGINE::ComponentInstance::getCompoName(), YACS::ENGINE::Container::getProc(), YACS::ENGINE::Node::getProperties(), YACS::ENGINE::PropertyInterface::getProperties(), and p.

Referenced by LoadComponent(), and YACS::ENGINE::SalomeContainerTmpForHP::loadComponent().

◆ getContainerName()

virtual std::string YACS::ENGINE::SalomeContainerToolsBase::getContainerName ( ) const
pure virtual

◆ GetFullPlacementId()

std::string SalomeContainerToolsBase::GetFullPlacementId ( const SalomeContainerHelper launchModeType,
const Container cont,
const Task askingNode 
)
static

Definition at line 535 of file SalomeContainerTools.cxx.

536{
537 if(cont->isAlreadyStarted(askingNode))
538 {
539 Engines::Container_var container(launchModeType->getContainer(askingNode));
540 try
541 {
542 CORBA::String_var corbaStr(container->name());
543 std::string ret(corbaStr);
544 return ret;
545 }
546 catch(...)
547 {
548 return "Unknown_placement";
549 }
550 }
551 else
552 return "Not_placed_yet";
553}
virtual bool isAlreadyStarted(const Task *askingNode) const =0
virtual Engines::Container_var getContainer(const Task *askingNode) const =0

References YACS::ENGINE::SalomeContainerHelper::getContainer(), and YACS::ENGINE::Container::isAlreadyStarted().

Referenced by YACS::ENGINE::SalomeContainer::getFullPlacementId(), and YACS::ENGINE::SalomeHPContainer::getFullPlacementId().

◆ getHostName()

virtual std::string YACS::ENGINE::SalomeContainerToolsBase::getHostName ( ) const
pure virtual

◆ getNotNullContainerName()

virtual std::string YACS::ENGINE::SalomeContainerToolsBase::getNotNullContainerName ( const Container contPtr,
const Task askingNode,
bool &  isEmpty 
) const
pure virtual

◆ getNumberOfCoresPerWorker()

virtual int YACS::ENGINE::SalomeContainerToolsBase::getNumberOfCoresPerWorker ( ) const
pure virtual

◆ getParameters()

virtual Engines::ContainerParameters YACS::ENGINE::SalomeContainerToolsBase::getParameters ( ) const
pure virtual

◆ GetPlacementId()

std::string SalomeContainerToolsBase::GetPlacementId ( const SalomeContainerHelper launchModeType,
const Container cont,
const Task askingNode 
)
static

Definition at line 515 of file SalomeContainerTools.cxx.

516{
517 if(cont->isAlreadyStarted(askingNode))
518 {
519 Engines::Container_var container(launchModeType->getContainer(askingNode));
520 const char *what="/";
521 CORBA::String_var corbaStr(container->name());
522 std::string ret(corbaStr);
523
524 //Salome FOREVER ...
525 std::string::size_type i=ret.find_first_of(what,0);
526 i=ret.find_first_of(what, i==std::string::npos ? i:i+1);
527 if(i!=std::string::npos)
528 return ret.substr(i+1);
529 return ret;
530 }
531 else
532 return "Not placed yet !!!";
533}

References YACS::ENGINE::SalomeContainerHelper::getContainer(), yacsorb.CORBAEngineTest::i, and YACS::ENGINE::Container::isAlreadyStarted().

Referenced by YACS::ENGINE::SalomeContainer::getPlacementId(), and YACS::ENGINE::SalomeHPContainer::getPlacementId().

◆ getProperties()

virtual const std::map< std::string, std::string > & YACS::ENGINE::SalomeContainerToolsBase::getProperties ( ) const
pure virtual

◆ getProperty()

virtual std::string YACS::ENGINE::SalomeContainerToolsBase::getProperty ( const std::string &  name) const
pure virtual

◆ getResourceProperties()

virtual std::map< std::string, std::string > YACS::ENGINE::SalomeContainerToolsBase::getResourceProperties ( const std::string &  name) const
pure virtual

◆ LoadComponent()

CORBA::Object_ptr SalomeContainerToolsBase::LoadComponent ( SalomeContainerHelper launchModeType,
Container cont,
Task askingNode 
)
static

Definition at line 450 of file SalomeContainerTools.cxx.

451{
452 DEBUG_YACSTRACE("SalomeContainer::loadComponent ");
453 const ComponentInstance *inst(askingNode?askingNode->getComponent():0);
454 {
455 YACS::BASES::AutoLocker<Container> alck(cont);//To be sure
456 if(!cont->isAlreadyStarted(askingNode))
457 cont->start(askingNode);
458 }
459 if(!inst)
460 throw Exception("SalomeContainerToolsBase::LoadComponent : no instance of component in the task requesting for a load of its component !");
461 CORBA::Object_ptr objComponent=CORBA::Object::_nil();
462 {
463 YACS::BASES::AutoLocker<Container> alck(cont);//To be sure
464 std::string compoName(inst->getCompoName());
465 Engines::Container_var container(launchModeType->getContainer(askingNode));
466
467 char *reason;
468 bool isLoadable(container->load_component_Library(compoName.c_str(), reason));
469 if(isLoadable)
470 objComponent=CreateComponentInstance(cont,container,inst);
471 }
472 return objComponent;
473}
Base class for all component instances.
virtual void start(const Task *askingNode)=0
static CORBA::Object_ptr CreateComponentInstance(Container *cont, Engines::Container_ptr contPtr, const ComponentInstance *inst)
virtual ComponentInstance * getComponent()=0

References CreateComponentInstance(), DEBUG_YACSTRACE, YACS::ENGINE::ComponentInstance::getCompoName(), YACS::ENGINE::Task::getComponent(), YACS::ENGINE::SalomeContainerHelper::getContainer(), YACS::ENGINE::Container::isAlreadyStarted(), and YACS::ENGINE::Container::start().

Referenced by YACS::ENGINE::SalomeContainer::loadComponent().

◆ setContainerName()

virtual void YACS::ENGINE::SalomeContainerToolsBase::setContainerName ( const std::string &  name)
pure virtual

◆ SetContainerNameOf()

void SalomeContainerToolsBase::SetContainerNameOf ( Engines::ContainerParameters &  params,
const std::string &  name 
)
static

Definition at line 272 of file SalomeContainerTools.cxx.

273{
274 params.container_name=CORBA::string_dup(name.c_str());
275}

Referenced by YACS::ENGINE::SalomeContainerTools::setContainerName(), and Start().

◆ setProperty()

virtual void YACS::ENGINE::SalomeContainerToolsBase::setProperty ( const std::string &  name,
const std::string &  value 
)
pure virtual

◆ Start()

void SalomeContainerToolsBase::Start ( const std::vector< std::string > &  compoNames,
SalomeContainerHelper schelp,
SalomeContainerToolsBase sct,
int &  shutdownLevel,
const Container cont,
const Task askingNode 
)
static
Parameters
[in]compoNames
[in,out]shutdownLevel

Definition at line 321 of file SalomeContainerTools.cxx.

322{
323 CORBA::ORB_ptr orb(getSALOMERuntime()->getOrb());
325 try
326 {
327 ns.init_orb(orb);
328 }
329 catch(SALOME_Exception& e)
330 {
331 throw Exception("SalomeContainer::start : Unable to contact the SALOME Naming Service");
332 }
333 CORBA::Object_var obj(ns.Resolve(SALOME_ContainerManager::_ContainerManagerNameInNS));
334 Engines::ContainerManager_var contManager(Engines::ContainerManager::_narrow(obj));
335
336 bool isEmptyName;
337 std::string str(sct.getNotNullContainerName(cont,askingNode,isEmptyName));
338 DEBUG_YACSTRACE("SalomeContainer::start " << str <<";"<< sct.getHostName() );
339
340 // Finalize parameters with components found in the container
341
342 for(std::vector<std::string>::const_iterator iter=compoNames.begin();iter!=compoNames.end();iter++)
343 sct.addToComponentList(*iter);
344
345 Engines::ContainerParameters myparams(sct.getParameters());
346 {
347 std::string dftLauchMode(schelp->getDftLaunchMode());
348 myparams.mode=CORBA::string_dup(dftLauchMode.c_str());
349 }
350
351 //If a container_name is given try to find an already existing container in naming service
352 //If not found start a new container with the given parameters
353 if (dynamic_cast<SalomeContainerMonoHelper *>(schelp) && !isEmptyName)
354 {
355 myparams.mode=CORBA::string_dup("getorstart");
356 }
357
358 if (isEmptyName)
359 {
360 shutdownLevel=1;
361 }
362 //sct.setContainerName(str);
363 SetContainerNameOf(myparams,str);
364 Engines::Container_var trueCont(Engines::Container::_nil());
365 if(!isEmptyName && shutdownLevel==999)
366 {
367 //Make this only the first time start is called (_shutdownLevel==999)
368 //If the container is named, first try to get an existing container
369 //If there is an existing container use it and set the shutdown level to 3
370 //If there is no existing container, try to launch a new one and set the shutdown level to 2
371 myparams.mode="get";
372 try
373 {
374 DEBUG_YACSTRACE("GiveContainer " << str << " mode " << myparams.mode);
375 trueCont=contManager->GiveContainer(myparams);
376 }
377 catch( const SALOME::SALOME_Exception& ex )
378 {
379 std::string msg="SalomeContainer::start : no existing container : ";
380 msg += '\n';
381 msg += ex.details.text.in();
382 DEBUG_YACSTRACE( msg );
383 }
384 catch(...)
385 {
386 }
387
388 if(!CORBA::is_nil(trueCont))
389 {
390 shutdownLevel=3;
391 DEBUG_YACSTRACE( "container found: " << str << " " << shutdownLevel );
392 }
393 else
394 {
395 shutdownLevel=2;
396 myparams.mode="start";
397 DEBUG_YACSTRACE( "container not found: " << str << " " << shutdownLevel);
398 }
399 }
400
401 int nbTries=0;
402 while(CORBA::is_nil(trueCont))
403 {
404 try
405 {
406 // --- GiveContainer is used in batch mode to retreive launched containers,
407 // and is equivalent to StartContainer when not in batch.
408 DEBUG_YACSTRACE("GiveContainer " << str << " mode " << myparams.mode);
409 trueCont=contManager->GiveContainer(myparams);
410 }
411 catch( const SALOME::SALOME_Exception& ex )
412 {
413 std::string msg="SalomeContainer::start : Unable to launch container in Salome : ";
414 msg += '\n';
415 msg += ex.details.text.in();
416 throw Exception(msg);
417 }
418 catch(CORBA::COMM_FAILURE&)
419 {
420 //std::cerr << "SalomeContainer::start : CORBA Comm failure detected. Make another try!" << std::endl;
421 DEBUG_YACSTRACE("SalomeContainer::start :" << str << " :CORBA Comm failure detected. Make another try!");
422 nbTries++;
423 if(nbTries > 5)
424 {
425 std::ostringstream oss; oss << "SalomeContainer::start : Unable to launch container " << myparams.container_name << " in Salome : CORBA Comm failure detected";
426 throw Exception( oss.str() );
427 }
428 }
429 catch(CORBA::Exception&)
430 {
431 std::ostringstream oss; oss << "SalomeContainer::start : Unable to launch container " << myparams.container_name << " in Salome : Unexpected CORBA failure detected";
432 throw Exception( oss.str() );
433 }
434 }
435
436 if(CORBA::is_nil(trueCont))
437 {
438 std::ostringstream oss; oss << "SalomeContainer::start : Unable to launch container " << myparams.container_name << " in Salome. Check your CatalogResources.xml file";
439 throw Exception( oss.str() );
440 }
441
442 // TODO : thread safety!
443 schelp->setContainer(askingNode,trueCont);
444
445 CORBA::String_var containerName(trueCont->name()),hostName(trueCont->getHostName());
446 //std::cerr << "SalomeContainer launched : " << containerName << " " << hostName << " " << trueCont->getPID() << std::endl;
447 DEBUG_YACSTRACE("SalomeContainer launched : NS entry : " << containerName << " PID : " << trueCont->getPID() );
448}
void init_orb(CORBA::ORB_ptr orb=0) override
CORBA::Object_ptr Resolve(const char *Path) override
virtual std::string getDftLaunchMode() const =0
virtual void setContainer(const Task *askingNode, Engines::Container_var cont)=0
virtual Engines::ContainerParameters getParameters() const =0
virtual std::string getHostName() const =0
virtual void addToComponentList(const std::string &name)=0
virtual std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool &isEmpty) const =0
static void SetContainerNameOf(Engines::ContainerParameters &params, const std::string &name)
YACSRUNTIMESALOME_EXPORT RuntimeSALOME * getSALOMERuntime()
CORBA::ORB_ptr orb
Definition: yacsSrv.cxx:39

References addToComponentList(), DEBUG_YACSTRACE, testCppPluginInvokation::ex, YACS::ENGINE::SalomeContainerHelper::getDftLaunchMode(), getHostName(), getNotNullContainerName(), getParameters(), YACS::ENGINE::getSALOMERuntime(), SALOME_NamingService_Wrapper::init_orb(), orb, SALOME_NamingService_Wrapper::Resolve(), YACS::ENGINE::SalomeContainerHelper::setContainer(), and SetContainerNameOf().

Referenced by YACS::ENGINE::SalomeHPContainer::start(), and YACS::ENGINE::SalomeContainer::start().


The documentation for this class was generated from the following files: