Salome HOME
Merge from V5_1_main 14/05/2010
[modules/kernel.git] / src / Container / SALOME_ContainerManager.hxx
index 7b1f26eab23e6d971d7fb4603b2a22758ac68b00..59ceee4e833200fd8086b086896902328ca47a7d 100644 (file)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -19,6 +19,7 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 #ifndef __SALOME_CONTAINERMANAGER_HXX__
 #define __SALOME_CONTAINERMANAGER_HXX__
 
@@ -42,87 +43,57 @@ public:
   SALOME_ContainerManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_ResourcesManager *rm, SALOME_NamingService *ns);
   ~SALOME_ContainerManager();
 
+  // Corba Methods
   Engines::Container_ptr
-  FindOrStartContainer(const Engines::MachineParameters& params,
-                      const Engines::MachineList& possibleComputer);
-
-  Engines::Container_ptr
-  StartContainer(const Engines::MachineParameters& params,
-                const Engines::MachineList& possibleComputer,
-                Engines::ResPolicy policy,
-     const std::string& container_exe="SALOME_Container");
+  GiveContainer(const Engines::ContainerParameters& params);
 
-  Engines::Container_ptr
-  StartContainer(const Engines::MachineParameters& params,
-               Engines::ResPolicy policy,
-               const Engines::CompoList& componentList);
-
-  Engines::Container_ptr
-  GiveContainer(const Engines::MachineParameters& params,
-               Engines::ResPolicy policy,
-               const Engines::CompoList& componentList);
+  void ShutdownContainers();
 
+  // C++ Methods
   void Shutdown();
-  void ShutdownContainers();
 
   static const char *_ContainerManagerNameInNS;
 
-  // Parallel extension
-  Engines::Container_ptr
-  FindOrStartParallelContainer(const Engines::MachineParameters& params,
-                              const Engines::MachineList& possibleComputer);
 protected:
+  // C++ methods
   Engines::Container_ptr
-  FindContainer(const Engines::MachineParameters& params,
-               const Engines::MachineList& possibleComputers);
+  FindContainer(const Engines::ContainerParameters& params,
+                const Engines::ResourceList& possibleResources);
 
   Engines::Container_ptr
-  FindContainer(const Engines::MachineParameters& params,
-               const char *theMachine);
-
-  // Parallel extension
-  CORBA::Object_ptr 
-  LaunchParallelContainer(const std::string& command, 
-                         const Engines::MachineParameters& params,
-                         const std::string& name);
-
-  void fillBatchLaunchedContainers();
-
-  long GetIdForContainer(void);
+  FindContainer(const Engines::ContainerParameters& params,
+                const std::string& resource);
 
-  std::string BuildCommandToLaunchRemoteContainer(const std::string& machine,
-                                                 const Engines::MachineParameters& params, const long id,
-              const std::string& container_exe="SALOME_Container");
+  std::string BuildCommandToLaunchRemoteContainer(const std::string & resource_name,
+                                                  const Engines::ContainerParameters& params, 
+                                                  const std::string& container_exe="SALOME_Container");
 
-  std::string BuildCommandToLaunchLocalContainer(const Engines::MachineParameters& params, const long id,
+  std::string BuildCommandToLaunchLocalContainer(const Engines::ContainerParameters& params, 
+                                                 const std::string& machinesFile,
                                                  const std::string& container_exe="SALOME_Container");
 
-  std::string BuildTempFileToLaunchRemoteContainer(const std::string& machine,
-                                                  const Engines::MachineParameters& params) throw(SALOME_Exception);
+  std::string BuildTempFileToLaunchRemoteContainer(const std::string& resource_name,
+                                                   const Engines::ContainerParameters& params) throw(SALOME_Exception);
 
-  void RmTmpFile();
+  void RmTmpFile(std::string& tmpFile);
 
   void AddOmninamesParams(std::string& command) const;
 
+  void AddOmninamesParams(std::ostringstream& oss) const;
+
   void AddOmninamesParams(std::ofstream& fileStream) const;
 
   std::string BuildTemporaryFileName() const;
 
-  // Parallel extension
-  std::string BuildCommandToLaunchLocalParallelContainer(const std::string& exe_name, 
-                                                        const Engines::MachineParameters& params, 
-                                                        const std::string& log = "default");
-  void startMPI();
-  bool _MpiStarted;
+  std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile);
+
+  std::string machinesFile(const int nbproc);
 
-  long _id;
   CORBA::ORB_var _orb;
   PortableServer::POA_var _poa;
 
   SALOME_ResourcesManager *_ResManager;
   SALOME_NamingService *_NS;
-  static std::vector<Engines::Container_ptr> _batchLaunchedContainers;
-  static std::vector<Engines::Container_ptr>::iterator _batchLaunchedContainersIter;
 
   //! attribute that contains current tmp files generated
   std::string _TmpFileName;
@@ -134,5 +105,47 @@ protected:
   //! 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;
+
+  static omni_mutex _numInstanceMutex ; // lib and instance protection
+
+  // Begin of PacO++ Parallel extension
+  typedef std::vector<std::string> actual_launch_machine_t;
+
+  bool checkPaCOParameters(Engines::ContainerParameters & params, std::string resource_selected);
+
+  Engines::Container_ptr 
+  StartPaCOPPContainer(const Engines::ContainerParameters& params, std::string resource_selected);
+
+
+
+  std::string BuildCommandToLaunchPaCOProxyContainer(const Engines::ContainerParameters& params,
+                                                     std::string machine_file_name,
+                                                     std::string & proxy_hostname);
+
+  std::string BuildCommandToLaunchPaCONodeContainer(const Engines::ContainerParameters& params,
+                                                    const std::string & machine_file_name,
+                                                    SALOME_ContainerManager::actual_launch_machine_t & vect_machine, 
+                                                    const std::string & proxy_hostname); 
+
+  void LogConfiguration(const std::string & log_type,
+                        const std::string & exe_type,
+                        const std::string & container_name,
+                        const std::string & hostname,
+                        std::string & begin, 
+                        std::string & end);
+
+  CORBA::Object_ptr 
+  LaunchPaCOProxyContainer(const std::string& command, 
+                           const Engines::ContainerParameters& params,
+                           const std::string& hostname);
+
+  bool 
+  LaunchPaCONodeContainer(const std::string& command, 
+                          const Engines::ContainerParameters& params,
+                          const std::string& name,
+                          SALOME_ContainerManager::actual_launch_machine_t & vect_machine);
+  // End of PaCO++ Parallel extension
 };
 #endif