X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FSALOME_ContainerManager.hxx;h=59ceee4e833200fd8086b086896902328ca47a7d;hb=cbeb1b9ad4789b0fe4ea7f8efcaf98f7f8fec2f6;hp=602f88511334a5564139c5c41ccde2b121c92745;hpb=35960e77d7f9f2a5cac7d6550c23f12943bc4378;p=modules%2Fkernel.git diff --git a/src/Container/SALOME_ContainerManager.hxx b/src/Container/SALOME_ContainerManager.hxx index 602f88511..59ceee4e8 100644 --- a/src/Container/SALOME_ContainerManager.hxx +++ b/src/Container/SALOME_ContainerManager.hxx @@ -1,25 +1,30 @@ -// Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// See http://www.salome-platform.org/ +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + #ifndef __SALOME_CONTAINERMANAGER_HXX__ #define __SALOME_CONTAINERMANAGER_HXX__ +#include "SALOME_Container.hxx" + #include #include CORBA_CLIENT_HEADER(SALOME_Component) #include CORBA_CLIENT_HEADER(SALOME_ContainerManager) @@ -30,58 +35,117 @@ class SALOME_NamingService; -#if defined CONTAINER_EXPORTS -#if defined WIN32 -#define CONTAINER_EXPORT __declspec( dllexport ) -#else -#define CONTAINER_EXPORT -#endif -#else -#if defined WNT -#define CONTAINER_EXPORT __declspec( dllimport ) -#else -#define CONTAINER_EXPORT -#endif -#endif - class CONTAINER_EXPORT SALOME_ContainerManager: - public POA_Engines::ContainerManager, - public PortableServer::RefCountServantBase + public POA_Engines::ContainerManager { public: - SALOME_ContainerManager(CORBA::ORB_ptr orb); + 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::MachineList * - GetFittingResources(const Engines::MachineParameters& params, - const char *componentName); + GiveContainer(const Engines::ContainerParameters& params); - char* FindBest(const Engines::MachineList& possibleComputers); + void ShutdownContainers(); + // C++ Methods void Shutdown(); - void ShutdownContainers(); static const char *_ContainerManagerNameInNS; -private: +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); + FindContainer(const Engines::ContainerParameters& params, + const std::string& resource); + + std::string BuildCommandToLaunchRemoteContainer(const std::string & resource_name, + const Engines::ContainerParameters& params, + const std::string& container_exe="SALOME_Container"); + + std::string BuildCommandToLaunchLocalContainer(const Engines::ContainerParameters& params, + const std::string& machinesFile, + const std::string& container_exe="SALOME_Container"); + + std::string BuildTempFileToLaunchRemoteContainer(const std::string& resource_name, + const Engines::ContainerParameters& params) throw(SALOME_Exception); + + void RmTmpFile(std::string& tmpFile); + + void AddOmninamesParams(std::string& command) const; + + void AddOmninamesParams(std::ostringstream& oss) const; + + void AddOmninamesParams(std::ofstream& fileStream) const; - long GetIdForContainer(void); - long _id; + std::string BuildTemporaryFileName() const; + + std::string GetMPIZeroNode(const std::string machine, const std::string machinesFile); + + std::string machinesFile(const int nbproc); + + CORBA::ORB_var _orb; + PortableServer::POA_var _poa; SALOME_ResourcesManager *_ResManager; SALOME_NamingService *_NS; -}; + //! attribute that contains current tmp files generated + std::string _TmpFileName; + + //! contains the rsh or ssh command to access directly to machine. + // Only used by this->RmTmpFile in case of a remote launch. + std::string _CommandForRemAccess; + + //! 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 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