From 7e1d8de9f1daaf767b8d556843e07c6b5b3121a7 Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Fri, 8 Sep 2023 17:13:15 +0200 Subject: [PATCH] [EDF27562] : Fix clustertest --- src/Basics/KernelBasis.cxx | 22 +++++++++++++++++-- src/Basics/KernelBasis.hxx | 3 +++ src/Basics/KernelBasis.i | 10 +++++++++ src/Basics/libSALOMELog.cxx | 20 ++++++++++++----- src/Basics/libSALOMELog.hxx | 1 + src/Container/SALOME_ContainerManager.cxx | 12 ++++++++++ .../ScriptsTemplate/SALOME_CM_REMOTE.py | 13 +++++------ .../ScriptsTemplate/SALOME_CM_REMOTE_OLD.py | 13 +++++------ .../ScriptsTemplate/script_parameters.py | 7 ++---- 9 files changed, 75 insertions(+), 26 deletions(-) diff --git a/src/Basics/KernelBasis.cxx b/src/Basics/KernelBasis.cxx index 921ac72c3..f86b0026f 100644 --- a/src/Basics/KernelBasis.cxx +++ b/src/Basics/KernelBasis.cxx @@ -45,12 +45,30 @@ void setGUIMode(bool guiMode) GUI_MODE = guiMode; } -std::string BASICS_EXPORT getIOROfEmbeddedNS() +std::string getIOROfEmbeddedNS() { return IOR_OF_EMBEDDED_NS; } -void BASICS_EXPORT setIOROfEmbeddedNS(const std::string& ior) +void setIOROfEmbeddedNS(const std::string& ior) { IOR_OF_EMBEDDED_NS = ior; } + +#include + +/*! + * Callable from Python in case if sys.stdout is not connected to tty + */ +void WriteInStdout(const std::string& msg) +{ + std::cout << msg << std::endl << std::flush; +} + +/*! + * Callable from Python in case if sys.stdout is not connected to tty + */ +void WriteInStderr(const std::string& msg) +{ + std::cerr << msg << std::endl << std::flush; +} diff --git a/src/Basics/KernelBasis.hxx b/src/Basics/KernelBasis.hxx index 6e96c84e6..2aa0499e5 100644 --- a/src/Basics/KernelBasis.hxx +++ b/src/Basics/KernelBasis.hxx @@ -30,3 +30,6 @@ void BASICS_EXPORT setGUIMode(bool guiMode); std::string BASICS_EXPORT getIOROfEmbeddedNS(); void BASICS_EXPORT setIOROfEmbeddedNS(const std::string& ior); + +void BASICS_EXPORT WriteInStdout(const std::string& msg); +void BASICS_EXPORT WriteInStderr(const std::string& msg); diff --git a/src/Basics/KernelBasis.i b/src/Basics/KernelBasis.i index 7bbcf28d3..45908234b 100644 --- a/src/Basics/KernelBasis.i +++ b/src/Basics/KernelBasis.i @@ -22,6 +22,7 @@ %{ #include "KernelBasis.hxx" #include "HeatMarcel.hxx" +#include "libSALOMELog.hxx" using namespace SALOME; %} @@ -40,6 +41,15 @@ void setIOROfEmbeddedNS(const std::string& ior); double GetTimeAdjustmentCst(); +bool VerbosityActivated(); + +void SetVerbosityActivated(bool flag); + +void WriteInStdout(const std::string& msg); + +void WriteInStderr(const std::string& msg); + + %inline { PyObject *HeatMarcelSwig(double timeAjustment, unsigned int nbThreads = 0) diff --git a/src/Basics/libSALOMELog.cxx b/src/Basics/libSALOMELog.cxx index fe0beeb2a..b1d1332e6 100644 --- a/src/Basics/libSALOMELog.cxx +++ b/src/Basics/libSALOMELog.cxx @@ -27,6 +27,10 @@ #include #include +enum class VerbosityMode { undefined, nolog, withlog }; + +static VerbosityMode isActivated = VerbosityMode::undefined; + namespace SALOME { @@ -43,7 +47,7 @@ namespace SALOME bool VerbosityActivated() { - auto isEnvVarSet = []() -> bool + auto isEnvVarSet = []() -> VerbosityMode { const char* envVar = std::getenv("SALOME_VERBOSE"); @@ -52,7 +56,7 @@ namespace SALOME try { const long long numValue = std::stoll(envVar); - return numValue > 0; + return numValue > 0?VerbosityMode::withlog:VerbosityMode::nolog; } catch(const std::exception& e) { @@ -60,10 +64,16 @@ namespace SALOME } } - return false; + return VerbosityMode::nolog; }; - static const bool isActivated = isEnvVarSet(); - return isActivated; + if(isActivated == VerbosityMode::undefined) + isActivated = isEnvVarSet(); + return isActivated == VerbosityMode::withlog; + } + + void SetVerbosityActivated(bool flag) + { + isActivated = flag ? VerbosityMode::withlog:VerbosityMode::nolog; } } diff --git a/src/Basics/libSALOMELog.hxx b/src/Basics/libSALOMELog.hxx index 93949515b..7d4b70611 100644 --- a/src/Basics/libSALOMELog.hxx +++ b/src/Basics/libSALOMELog.hxx @@ -29,4 +29,5 @@ namespace SALOME { bool BASICS_EXPORT VerbosityActivated(); + void BASICS_EXPORT SetVerbosityActivated(bool); } diff --git a/src/Container/SALOME_ContainerManager.cxx b/src/Container/SALOME_ContainerManager.cxx index 15bc6edec..ffb6252f5 100644 --- a/src/Container/SALOME_ContainerManager.cxx +++ b/src/Container/SALOME_ContainerManager.cxx @@ -604,13 +604,22 @@ SALOME_ContainerManager::LaunchContainer(const Engines::ContainerParameters& par MESSAGE("[GiveContainer] Try to launch a new container on " << resource_selected); // if a parallel container is launched in batch job, command is: "mpirun -np nbproc -machinefile nodesfile SALOME_MPIContainer" if( GetenvThreadSafe("LIBBATCH_NODEFILE") != NULL && params.isMPI ) + { command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe, tmpFileName); + MESSAGE("[LaunchContainer] LIBBATCH_NODEFILE : \"" << command << "\""); + } // if a container is launched on localhost, command is "SALOME_Container" or "mpirun -np nbproc SALOME_MPIContainer" else if(hostname == Kernel_Utils::GetHostname()) + { command = BuildCommandToLaunchLocalContainer(params, machFile, container_exe, tmpFileName); + MESSAGE("[LaunchContainer] hostname local : \"" << command << "\""); + } // if a container is launched in remote mode, command is "ssh resource_selected SALOME_Container" or "ssh resource_selected mpirun -np nbproc SALOME_MPIContainer" else + { command = BuildCommandToLaunchRemoteContainer(resource_selected, params, container_exe); + MESSAGE("[LaunchContainer] remote : \"" << command << "\""); + } //redirect stdout and stderr in a file #ifdef WIN32 @@ -641,6 +650,7 @@ SALOME_ContainerManager::LaunchContainer(const Engines::ContainerParameters& par command += " > " + logFilename + " 2>&1"; MakeTheCommandToBeLaunchedASync(command); + MESSAGE("[LaunchContainer] SYSTEM COMMAND that will be launched : \"" << command << "\""); // launch container with a system call status=SystemThreadSafe(command.c_str()); }//end of critical of section @@ -789,12 +799,14 @@ SALOME_ContainerManager::BuildCommandToLaunchRemoteContainer(const std::string& std::string wdir = params.workingdir.in(); if (!_isAppliSalomeDefined) { + MESSAGE("[BuildCommandToLaunchRemoteContainer] NO APPLI MODE : " << " Protocol :" << resInfo.Protocol << " hostname :" << resInfo.HostName << " username : " << resInfo.UserName << " appli : " << resInfo.AppliPath << " wdir : \"" << wdir << "\""); command = getCommandToRunRemoteProcessNoAppli(resInfo.Protocol, resInfo.HostName, resInfo.UserName, resInfo.AppliPath, wdir); } else { + MESSAGE("[BuildCommandToLaunchRemoteContainer] WITH APPLI MODE : " << " Protocol :" << resInfo.Protocol << " hostname :" << resInfo.HostName << " username : " << resInfo.UserName << " appli : " << resInfo.AppliPath << " wdir : \"" << wdir << "\""); // "ssh -l user machine distantPath/runRemote.sh hostNS portNS WORKINGDIR workingdir // SALOME_Container containerName -ORBInitRef NameService=IOR:01000..." // or diff --git a/src/Container/ScriptsTemplate/SALOME_CM_REMOTE.py b/src/Container/ScriptsTemplate/SALOME_CM_REMOTE.py index c4a33b196..f439a541d 100644 --- a/src/Container/ScriptsTemplate/SALOME_CM_REMOTE.py +++ b/src/Container/ScriptsTemplate/SALOME_CM_REMOTE.py @@ -2,11 +2,8 @@ import sys class ScriptRemoteParameters: def __init__(self, args): - self.debug = False - if args[0] == "-d": - self.debug = True - args = args[1:] - + import KernelBasis + self.debug = KernelBasis.VerbosityActivated() self.protocol = args[0] self.user = self._read_arg(args[1], "NULL") self.host = self._read_arg(args[2], "NULL") @@ -45,8 +42,10 @@ class ScriptRemoteParameters: # ---------------------------------------------- def command(args): + import KernelBasis options = ScriptRemoteParameters(args) - if options.debug: print(options) + if options.debug: + KernelBasis.WriteInStdout( str(options) ) # build command depending on protocol cmd = [] @@ -102,7 +101,7 @@ def command(args): if options.workdir: cmd.append("-d " + options.workdir) - cmd.append("--") + cmd.append("--") # elif ignore other appli_mode value diff --git a/src/Container/ScriptsTemplate/SALOME_CM_REMOTE_OLD.py b/src/Container/ScriptsTemplate/SALOME_CM_REMOTE_OLD.py index 9be7bd72e..a9808c17a 100644 --- a/src/Container/ScriptsTemplate/SALOME_CM_REMOTE_OLD.py +++ b/src/Container/ScriptsTemplate/SALOME_CM_REMOTE_OLD.py @@ -2,11 +2,8 @@ import sys class ScriptRemoteParameters: def __init__(self, args): - self.debug = False - if args[0] == "-d": - self.debug = True - args = args[1:] - + import KernelBasis + self.debug = KernelBasis.VerbosityActivated() self.protocol = args[0] self.user = self._read_arg(args[1], "NULL") self.host = self._read_arg(args[2], "NULL") @@ -45,8 +42,10 @@ class ScriptRemoteParameters: # ---------------------------------------------- def command(args): + import KernelBasis options = ScriptRemoteParameters(args) - if options.debug: print(options) + if options.debug: + KernelBasis.WriteInStdout( str(options) ) # build command depending on protocol cmd = [] @@ -109,7 +108,7 @@ def command(args): if options.workdir: cmd.append("-d " + options.workdir) - cmd.append("--") + cmd.append("--") # elif ignore other appli_mode value diff --git a/src/Container/ScriptsTemplate/script_parameters.py b/src/Container/ScriptsTemplate/script_parameters.py index 407f24a3e..ee1c6d3e7 100644 --- a/src/Container/ScriptsTemplate/script_parameters.py +++ b/src/Container/ScriptsTemplate/script_parameters.py @@ -1,10 +1,7 @@ class ScriptLocalParameters: def __init__(self, args): - self.debug = False - if args[0] == "-d": - self.debug = True - args = args[1:] - + import KernelBasis + self.debug = KernelBasis.VerbosityActivated() self.nb_proc = self._read_arg(args[0], "NULL") self.workdir = self._read_arg(args[1], "NULL") self.isTmpDir = True if args[2] == "1" else False -- 2.30.2