-// Copyright (C) 2007-2019 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
#include "Utils_Mutex.hxx"
+#include <vector>
#include <string>
+#include <utility>
+#include <functional>
#include <set>
-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<void(Engines::Container_ptr)> funcToBeCalledOnContainer);
+
protected:
// C++ methods
Engines::Container_ptr
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;
std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile) const;
std::string machinesFile(const int nbproc);
-
- 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,
PortableServer::POA_var _poa;
SALOME_ResourcesManager_Client *_resManager;
- SALOME_NamingService *_NS;
+ SALOME_NamingService_Abstract *_NS;
//! different behaviour if $APPLI exists (SALOME Application)
bool _isAppliSalomeDefined;
//! 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
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<std::string>& 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<std::string, std::string> > _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