Version: 9.15.0
SALOME_ContainerManager.hxx
Go to the documentation of this file.
1 // Copyright (C) 2007-2025 CEA, EDF, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 
23 #pragma once
24 
25 #include "SALOME_Container.hxx"
26 
27 #include <SALOMEconfig.h>
28 #include CORBA_CLIENT_HEADER(SALOME_Component)
29 #include CORBA_CLIENT_HEADER(SALOME_ContainerManager)
31 
32 #include "Utils_Mutex.hxx"
33 
34 #include <vector>
35 #include <string>
36 #include <utility>
37 #include <functional>
38 #include <set>
39 
42 
44 {
45 
46 public:
47  SALOME_ContainerManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService_Abstract *ns);
49 
50  // Corba Methods
51  Engines::Container_ptr GiveContainer(const Engines::ContainerParameters& params) override;
52 
53  void ShutdownContainers() override;
54 
55  void ShutdownContainersNow() override;
56 
57  void SetOverrideEnvForContainers(const Engines::KeyValDict& env) override;
58 
59  Engines::KeyValDict *GetOverrideEnvForContainers() override;
60 
61  void SetCodeOnContainerStartUp(const char *code) override;
62 
63  char *GetCodeOnContainerStartUp() override;
64 
65  // C++ Methods
66  void Shutdown();
67 
68  void DeclareUsingSalomeSession() { _isSSL = false; }
69 
70  CORBA::Long GetTimeOutToLaunchServerInSecond() override;
71 
72  void SetTimeOutToLaunchServerInSecond(CORBA::Long timeInSecond) override;
73 
74  CORBA::Long GetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond() override;
75 
76  void SetDeltaTimeBetweenNSLookupAtLaunchTimeInMilliSecond(CORBA::Long timeInMS) override;
77 
78  CORBA::Long GetDeltaTimeBetweenCPUMemMeasureInMilliSecond() override;
79 
80  void SetDeltaTimeBetweenCPUMemMeasureInMilliSecond(CORBA::Long timeInMS) override;
81 
82  void SetBigObjOnDiskThreshold(CORBA::Long thresholdInByte) override;
83 
84  void SetBigObjOnDiskDirectory(const char *directory) override;
85 
86  void SetDirectoryForReplayFiles(const char *directory) override;
87 
88  void SetNumberOfRetry(CORBA::Long nbRetry) override;
89 
90  CORBA::Long GetNumberOfRetry() override;
91 
92  static const char *_ContainerManagerNameInNS;
93 
94 private:
95 
96  void ShutdownContainersGeneric(std::function<void(Engines::Container_ptr)> funcToBeCalledOnContainer);
97 
98 protected:
99  // C++ methods
100  Engines::Container_ptr
101  FindContainer(const Engines::ContainerParameters& params,
102  const Engines::ResourceList& possibleResources);
103 
104  Engines::Container_ptr
105  FindContainer(const Engines::ContainerParameters& params,
106  const std::string& resource);
107 
108  std::string GetCppBinaryOfKernelSSLContainer() const;
109 
110  std::string GetCppBinaryOfKernelContainer() const;
111 
112  std::string GetRunRemoteExecutableScript() const;
113 
114  std::string BuildCommandToLaunchRemoteContainer(const std::string & resource_name,
115  const Engines::ContainerParameters& params,
116  const std::string& container_exe="SALOME_Container") const;
117 
118  std::string BuildCommandToLaunchLocalContainer(const Engines::ContainerParameters& params,
119  const std::string& machinesFile,
120  const std::string& container_exe,//"SALOME_Container"
121  std::string& tmpFileName) const;
122 
123  std::string BuildTempFileToLaunchRemoteContainer(const std::string& resource_name,
124  const Engines::ContainerParameters& params, std::string& tmpFileName) const;
125 
126  static void RmTmpFile(std::string& tmpFile);
127 
128  void AddOmninamesParams(std::string& command) const;
129 
130  void AddOmninamesParams(std::ostream& fileStream) const;
131 
132  static std::string BuildTemporaryFileName();
133 
134  std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile) const;
135 
136  std::string machinesFile(const int nbproc);
137 
138  std::string getCommandToRunRemoteProcessCommon(const std::string& templateName, const std::string& remoteScript,
139  AccessProtocolType protocol,
140  const std::string & hostname,
141  const std::string & username,
142  const std::string & applipath,
143  const std::string & workdir) const;
144 
145  std::string getCommandToRunRemoteProcess(AccessProtocolType protocol,
146  const std::string & hostname,
147  const std::string & username,
148  const std::string & applipath,
149  const std::string & workdir="") const;
150 
151  std::string getCommandToRunRemoteProcessNoAppli(AccessProtocolType protocol,
152  const std::string & hostname,
153  const std::string & username,
154  const std::string & applipath,
155  const std::string & workdir="") const;
156 
157  Engines::Container_ptr
158  LaunchContainer(const Engines::ContainerParameters& params,
159  const std::string & resource_selected,
160  const std::string & hostname,
161  const std::string & machFile,
162  const std::string & containerNameInNS);
163 
164  CORBA::ORB_var _orb;
165  PortableServer::POA_var _poa;
166 
169 
172 
175 
177  bool _isSSL = true;
178 
179  static omni_mutex _numInstanceMutex ; // lib and instance protection
180 
183 
185 
186  // Begin of PacO++ Parallel extension
187  typedef std::vector<std::string> actual_launch_machine_t;
188 
189  bool checkPaCOParameters(Engines::ContainerParameters & params, std::string resource_selected);
190 
191  Engines::Container_ptr
192  StartPaCOPPContainer(const Engines::ContainerParameters& params, std::string resource_selected);
193 
194 
195 
196  std::string BuildCommandToLaunchPaCOProxyContainer(const Engines::ContainerParameters& params,
197  std::string machine_file_name,
198  std::string & proxy_hostname);
199 
200  std::string BuildCommandToLaunchPaCONodeContainer(const Engines::ContainerParameters& params,
201  const std::string & machine_file_name,
203  const std::string & proxy_hostname);
204 
205  void LogConfiguration(const std::string & log_type,
206  const std::string & exe_type,
207  const std::string & container_name,
208  const std::string & hostname,
209  std::string & begin,
210  std::string & end);
211 
212  CORBA::Object_ptr
213  LaunchPaCOProxyContainer(const std::string& command,
214  const Engines::ContainerParameters& params,
215  const std::string& hostname);
216 
217  bool
218  LaunchPaCONodeContainer(const std::string& command,
219  const Engines::ContainerParameters& params,
220  const std::string& name,
222  // End of PaCO++ Parallel extension
223 public:
224  static char *GetenvThreadSafe(const char *name);
225  static std::string GetenvThreadSafeAsString(const char *name);
226  static int SystemThreadSafe(const char *command);
227  static long SystemWithPIDThreadSafe(const std::vector<std::string>& command);
228  static void AddOmninamesParams(std::ostream& fileStream, SALOME_NamingService_Abstract *ns);
229  static void MakeTheCommandToBeLaunchedASync(std::string& command);
230  static int GetTimeOutToLoaunchServer();
231  static void SleepInSecond(int ellapseTimeInSecond);
232  private:
233  static const int TIME_OUT_TO_LAUNCH_CONT;
237 private:
238  std::vector< std::pair<std::string, std::string> > _override_env;
243 };
#define CONTAINER_EXPORT
Definition: SALOME_Container.hxx:37
AccessProtocolType
Definition: SALOME_ResourcesCatalog_Parser.hxx:44
Definition: SALOME_ContainerManager.hxx:44
void DeclareUsingSalomeSession()
Definition: SALOME_ContainerManager.hxx:68
PortableServer::POA_var _poa
Definition: SALOME_ContainerManager.hxx:165
std::vector< std::pair< std::string, std::string > > _override_env
Definition: SALOME_ContainerManager.hxx:238
SALOME_NamingService_Abstract * _NS
Definition: SALOME_ContainerManager.hxx:168
std::string _code_to_exe_on_startup
Definition: SALOME_ContainerManager.hxx:242
int _nbprocUsed
attribute that contains the number of processes used in batch mode by MPI containers
Definition: SALOME_ContainerManager.hxx:174
static Utils_Mutex _systemMutex
Definition: SALOME_ContainerManager.hxx:236
static omni_mutex _numInstanceMutex
Definition: SALOME_ContainerManager.hxx:179
static const int TIME_OUT_TO_LAUNCH_CONT
Definition: SALOME_ContainerManager.hxx:233
static Utils_Mutex _getenvMutex
Definition: SALOME_ContainerManager.hxx:235
pid_t _pid_mpiServer
Definition: SALOME_ContainerManager.hxx:184
static const int DFT_DELTA_TIME_NS_LOOKUP_IN_MS
Definition: SALOME_ContainerManager.hxx:234
CORBA::ORB_var _orb
Definition: SALOME_ContainerManager.hxx:164
int _delta_time_ns_lookup_in_ms
Definition: SALOME_ContainerManager.hxx:240
int _time_out_in_second
Definition: SALOME_ContainerManager.hxx:239
int _delta_time_measure_in_ms
Definition: SALOME_ContainerManager.hxx:241
static const char * _ContainerManagerNameInNS
Definition: SALOME_ContainerManager.hxx:92
Utils_Mutex _giveContainerMutex1
attributes to allow concurrency for // GiveContainer
Definition: SALOME_ContainerManager.hxx:182
std::vector< std::string > actual_launch_machine_t
Definition: SALOME_ContainerManager.hxx:187
SALOME_ResourcesManager_Client * _resManager
Definition: SALOME_ContainerManager.hxx:167
bool _isAppliSalomeDefined
different behaviour if $APPLI exists (SALOME Application)
Definition: SALOME_ContainerManager.hxx:171
Definition: SALOME_NamingService_Abstract.hxx:46
Definition: SALOME_ResourcesManager_Client.hxx:33
Definition: Utils_Mutex.hxx:37
sequence< string > ResourceList
Type to transmit list of resources.
Definition: SALOME_ResourcesManager.idl:35
sequence< KeyValPairString > KeyValDict
Definition: SALOME_ContainerManager.idl:76
poa
Definition: SALOME_ContainerPy.py:377
list command
Definition: TestKernelHelpers.py:48
container_name
Definition: TestLifeCycleCORBA.py:42
ContainerManager
Definition: TestLifeCycleCORBA.py:57
string name
Definition: pythfilter.py:56
orb
Definition: salome.py:122
hostname
Definition: test.py:29
Type to describe required properties of a container.
Definition: SALOME_ContainerManager.idl:38