X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_ContainerManager.hxx;h=1ca71fef20e05304953db68a02e76451fc3a5b9b;hb=98cc28403d9d665489d8b393229bdeeebf337a09;hp=e543d20744805bfd4e7e297398c2948c79c3e0d7;hpb=718e0abe0126e5e53b3ba41fff1028efcf5bc887;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_ContainerManager.hxx b/src/Container/SALOME_ContainerManager.hxx index e543d2074..1ca71fef2 100644 --- a/src/Container/SALOME_ContainerManager.hxx +++ b/src/Container/SALOME_ContainerManager.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -32,29 +32,58 @@ #include "Utils_Mutex.hxx" +#include #include +#include +#include #include -class SALOME_NamingService; +class SALOME_NamingService_Abstract; class SALOME_ResourcesManager_Client; class CONTAINER_EXPORT SALOME_ContainerManager : public POA_Engines::ContainerManager { public: - SALOME_ContainerManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService *ns); + SALOME_ContainerManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService_Abstract *ns); ~SALOME_ContainerManager(); // Corba Methods - Engines::Container_ptr GiveContainer(const Engines::ContainerParameters& params); + Engines::Container_ptr GiveContainer(const Engines::ContainerParameters& params) override; - void ShutdownContainers(); + void ShutdownContainers() override; + + void ShutdownContainersNow() override; + + void SetOverrideEnvForContainers(const Engines::KeyValDict& env) override; + + Engines::KeyValDict *GetOverrideEnvForContainers() override; + + void SetCodeOnContainerStartUp(const char *code) override; // C++ Methods void Shutdown(); + void DeclareUsingSalomeSession() { _isSSL = false; } + + CORBA::Long GetTimeOutToLaunchServerInSecond() override; + + void SetTimeOutToLaunchServerInSecond(CORBA::Long timeInSecond) override; + + CORBA::Long GetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond() override; + + void SetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond(CORBA::Long timeInMS) override; + + CORBA::Long GetDeltaTimeBetweenCPUMemMeasureInMilliSecond() override; + + void SetDeltaTimeBetweenCPUMemMeasureInMilliSecond(CORBA::Long timeInMS) override; + static const char *_ContainerManagerNameInNS; +private: + + void ShutdownContainersGeneric(std::function funcToBeCalledOnContainer); + protected: // C++ methods Engines::Container_ptr @@ -65,6 +94,12 @@ protected: FindContainer(const Engines::ContainerParameters& params, const std::string& resource); + std::string GetCppBinaryOfKernelSSLContainer() const; + + std::string GetCppBinaryOfKernelContainer() const; + + std::string GetRunRemoteExecutableScript() const; + std::string BuildCommandToLaunchRemoteContainer(const std::string & resource_name, const Engines::ContainerParameters& params, const std::string& container_exe="SALOME_Container") const; @@ -88,10 +123,25 @@ protected: std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile) const; std::string machinesFile(const int nbproc); - - std::set getpidofprogram(const std::string program); - - static std::string getCommandToRunRemoteProcess(AccessProtocolType protocol, const std::string & hostname, const std::string & username); + + std::string getCommandToRunRemoteProcessCommon(const std::string& templateName, const std::string& remoteScript, + AccessProtocolType protocol, + const std::string & hostname, + const std::string & username, + const std::string & applipath, + const std::string & workdir) const; + + std::string getCommandToRunRemoteProcess(AccessProtocolType protocol, + const std::string & hostname, + const std::string & username, + const std::string & applipath, + const std::string & workdir="") const; + + std::string getCommandToRunRemoteProcessNoAppli(AccessProtocolType protocol, + const std::string & hostname, + const std::string & username, + const std::string & applipath, + const std::string & workdir="") const; Engines::Container_ptr LaunchContainer(const Engines::ContainerParameters& params, @@ -104,7 +154,7 @@ protected: PortableServer::POA_var _poa; SALOME_ResourcesManager_Client *_resManager; - SALOME_NamingService *_NS; + SALOME_NamingService_Abstract *_NS; //! different behaviour if $APPLI exists (SALOME Application) bool _isAppliSalomeDefined; @@ -112,6 +162,9 @@ protected: //! attribute that contains the number of processes used in batch mode by MPI containers int _nbprocUsed; + //! attribute that specifies the launch mode. + bool _isSSL = true; + static omni_mutex _numInstanceMutex ; // lib and instance protection //! attributes to allow concurrency for // GiveContainer @@ -160,13 +213,21 @@ public: static char *GetenvThreadSafe(const char *name); static std::string GetenvThreadSafeAsString(const char *name); static int SystemThreadSafe(const char *command); - static void AddOmninamesParams(std::ostream& fileStream, SALOME_NamingService *ns); + static long SystemWithPIDThreadSafe(const std::vector& command); + static void AddOmninamesParams(std::ostream& fileStream, SALOME_NamingService_Abstract *ns); static void MakeTheCommandToBeLaunchedASync(std::string& command); static int GetTimeOutToLoaunchServer(); static void SleepInSecond(int ellapseTimeInSecond); private: static const int TIME_OUT_TO_LAUNCH_CONT; + static const int DFT_DELTA_TIME_NS_LOOKUP_IN_MS; static Utils_Mutex _getenvMutex; static Utils_Mutex _systemMutex; +private: + std::vector< std::pair > _override_env; + int _time_out_in_second; + int _delta_time_ns_lookup_in_ms; + int _delta_time_measure_in_ms; + std::string _code_to_exe_on_startup; }; #endif