]> SALOME platform Git repositories - tools/libbatch.git/commitdiff
Salome HOME
Changed memory unit to megabytes for batch mangers ePBS and eLSF. V1_1_0rc3
authorbarate <barate>
Fri, 21 May 2010 08:38:02 +0000 (08:38 +0000)
committerbarate <barate>
Fri, 21 May 2010 08:38:02 +0000 (08:38 +0000)
Added method to create the local directory to import the output files.

Batch_config.h.in
CMakeLists.txt
CMakeModules/FindLocal.cmake
src/Core/Batch_BatchManager_eClient.cxx
src/Core/Batch_CommunicationProtocol.cxx
src/Core/Batch_CommunicationProtocol.hxx
src/Core/Batch_CommunicationProtocolSH.cxx
src/Core/Batch_CommunicationProtocolSH.hxx
src/LSF/Batch_BatchManager_eLSF.cxx
src/PBS/Batch_BatchManager_ePBS.cxx
src/PBS/Test/Test_ePBS.cxx

index 4918f2f34c34fb2767ba5396820868de57005d12..daa346fc84715327dc24c976b8296368bf37fd34 100644 (file)
@@ -27,7 +27,7 @@
 #cmakedefine MSVC
 #cmakedefine MINGW
 
-/* SH tools (sh, cp, rm) found on the system */
+/* SH tools (sh, cp, rm, mkdir) found on the system */
 #cmakedefine HAS_SH
 
 /* A path to a sh-like command */
@@ -39,6 +39,9 @@
 /* A path to a cp-like command */
 #cmakedefine CP_COMMAND "@CP_COMMAND@"
 
+/* A path to a mkdir-like command */
+#cmakedefine MKDIR_COMMAND "@MKDIR_COMMAND@"
+
 /* RSH tools (rsh, rcp) found on the system */
 #cmakedefine HAS_RSH
 
index 5872eb499c194a0ffd326b93e89c0e35c8f142de..db519d7fca694a9c1839db3fa98026dc78b0cfe1 100644 (file)
@@ -68,7 +68,7 @@ SET(CPACK_GENERATOR TGZ)
 SET(CPACK_SOURCE_GENERATOR TGZ ZIP)
 SET(CPACK_PACKAGE_VERSION_MAJOR 1)
 SET(CPACK_PACKAGE_VERSION_MINOR 1)
-SET(CPACK_PACKAGE_VERSION_PATCH 0rc2)
+SET(CPACK_PACKAGE_VERSION_PATCH 0rc3)
 SET(CPACK_SOURCE_IGNORE_FILES /\\\\.;/CVS/;~)
 SET(CPACK_SOURCE_PACKAGE_FILE_NAME
     ${PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
index 7b306342798414cb15152d057fda6244de26a67a..0e8c7df9b0715235c92a11d8057a906b44c2edc1 100644 (file)
@@ -55,11 +55,12 @@ MESSAGE(STATUS "Looking for commands needed for local submission...")
 FIND_LOCAL_COMMAND_WIN32_DEF(RM_COMMAND rm del)
 FIND_LOCAL_COMMAND(SH_COMMAND sh cmd.exe)
 FIND_LOCAL_COMMAND_WIN32_DEF(CP_COMMAND cp copy)
+FIND_LOCAL_COMMAND_WIN32_DEF(MKDIR_COMMAND mkdir mkdir)
 FIND_LOCAL_COMMAND(RSH_COMMAND rsh rsh)
 FIND_LOCAL_COMMAND(RCP_COMMAND rcp rcp)
 FIND_LOCAL_COMMAND(SSH_COMMAND ssh plink)
 FIND_LOCAL_COMMAND(SCP_COMMAND scp pscp)
 
-EVAL (HAS_SH SH_COMMAND AND CP_COMMAND AND RM_COMMAND)
+EVAL (HAS_SH SH_COMMAND AND CP_COMMAND AND RM_COMMAND AND MKDIR_COMMAND)
 EVAL (HAS_RSH RSH_COMMAND AND RCP_COMMAND)
 EVAL (HAS_SSH SSH_COMMAND AND SCP_COMMAND)
index ec5b8d8c85dcb64a8053f88a381a11243ab4b314..1f92a24915a293b1c5ffacc61bdb509c862548fb 100644 (file)
@@ -83,10 +83,7 @@ namespace Batch {
     Versatile::iterator Vit;
     _username = string(params[USER]);
 
-    string subCommand = string("mkdir -p ") + string(params[TMPDIR]) + string("/logs");
-    string command = _protocol.getExecCommand(subCommand, _hostname, _username);
-    cerr << command.c_str() << endl;
-    status = system(command.c_str());
+    status = _protocol.makeDirectory(string(params[TMPDIR]) + "/logs", _hostname, _username);
     if(status) {
       std::ostringstream oss;
       oss << status;
@@ -112,9 +109,9 @@ namespace Batch {
 #ifdef WIN32
       // On Windows, we make the remote file executable afterward because
       // pscp does not preserve access permissions on files
-      subCommand = string("chmod u+x ") + string(params[TMPDIR]) + "/" +
-                   string(params[EXECUTABLE]);
-      command = _protocol.getExecCommand(subCommand, _hostname, _username);
+      string subCommand = string("chmod u+x ") + string(params[TMPDIR]) + "/" +
+                          string(params[EXECUTABLE]);
+      string command = _protocol.getExecCommand(subCommand, _hostname, _username);
       cerr << command.c_str() << endl;
       status = system(command.c_str());
       if(status) {
@@ -152,11 +149,21 @@ namespace Batch {
     Versatile::iterator Vit;
     _username = string(params[USER]);
 
+    // Create local result directory
+    int status = CommunicationProtocol::getInstance(SH).makeDirectory(directory, "", "");
+    if (status) {
+      string mess("Directory creation failed. Status is :");
+      ostringstream status_str;
+      status_str << status;
+      mess += status_str.str();
+      cerr << mess << endl;
+    }
+
     for(Vit=V.begin(); Vit!=V.end(); Vit++) {
       CoupleType cpt  = *static_cast< CoupleType * >(*Vit);
       Couple outputFile = cpt;
-      int status = _protocol.copyFile(outputFile.getRemote(), _hostname, _username,
-                                      directory, "", "");
+      status = _protocol.copyFile(outputFile.getRemote(), _hostname, _username,
+                                  directory, "", "");
       if (status) {
         // Try to get what we can (logs files)
         // throw BatchException("Error of connection on remote host");
@@ -169,8 +176,8 @@ namespace Batch {
     }
 
     // Copy logs
-    int status = _protocol.copyFile(string(params[TMPDIR]) + string("/logs"), _hostname, _username,
-                                   directory, "", "");
+    status = _protocol.copyFile(string(params[TMPDIR]) + string("/logs"), _hostname, _username,
+                                directory, "", "");
     if (status) {
       std::string mess("Copy logs directory failed ! status is :");
       ostringstream status_str;
index 8133aaa5af018b4c4cdcbc7820701d5ca61034ab..c23c722fdeeaff4bbdabd52b4bdeb41e2e37855f 100644 (file)
@@ -104,6 +104,11 @@ namespace Batch {
     return string("rm ") + path;
   }
 
+  string CommunicationProtocol::getMakeDirectorySubCommand(const string & path) const
+  {
+    return string("mkdir -p ") + path;
+  }
+
   int CommunicationProtocol::removeFile(const std::string & path,
                                         const std::string & host,
                                         const std::string & user) const
@@ -114,6 +119,16 @@ namespace Batch {
     return status;
   }
 
+  int CommunicationProtocol::makeDirectory(const std::string & path,
+                                           const std::string & host,
+                                           const std::string & user) const
+  {
+    string command = getExecCommand(getMakeDirectorySubCommand(path), host, user);
+    cout << command.c_str() << endl;
+    int status = system(command.c_str());
+    return status;
+  }
+
   string CommunicationProtocol::commandStringFromArgs(const vector<string> & commandArgs) const
   {
     string commandStr;
index f8b091668b00714b409e15d9e75c1f6921f8ce08..c21ca8a04fc4f771c40e68f4a20caee1a28118ed 100644 (file)
@@ -64,6 +64,10 @@ namespace Batch {
                            const std::string & host,
                            const std::string & user) const;
 
+    virtual int makeDirectory(const std::string & path,
+                              const std::string & host,
+                              const std::string & user) const;
+
   protected:
 
     virtual std::vector<std::string> getCopyCommandArgs(const std::string & sourcePath,
@@ -75,6 +79,8 @@ namespace Batch {
 
     virtual std::string getRemoveSubCommand(const std::string & path) const;
 
+    virtual std::string getMakeDirectorySubCommand(const std::string & path) const;
+
     std::string commandStringFromArgs(const std::vector<std::string> & args) const;
 
   };
index 024fd0a297bd52bff84f0c21d157d9a58ebf98e5..d7d50857fef89a341407109deeecd3a58b36a60d 100644 (file)
@@ -85,7 +85,17 @@ namespace Batch {
 
   string CommunicationProtocolSH::getRemoveSubCommand(const string & path) const
   {
-    return string(RM_COMMAND) + " " + path;
+    return string(RM_COMMAND) + " " + fixPath(path);
+  }
+
+  string CommunicationProtocolSH::getMakeDirectorySubCommand(const string & path) const
+  {
+    string subCommand = MKDIR_COMMAND;
+#ifndef WIN32
+    subCommand += " -p";
+#endif
+    subCommand += " " + fixPath(path);
+    return subCommand;
   }
 
 }
index a95d9ef732bf7c69cf7e2cccde335e842dd47e73..b696e70faeddf7670af33875a98b25eec156d769 100644 (file)
@@ -51,9 +51,11 @@ namespace Batch {
                                                 const std::string & destinationHost,
                                                 const std::string & destinationUser) const;
 
+  protected:
+
     std::string getRemoveSubCommand(const std::string & path) const;
 
-  protected:
+    std::string getMakeDirectorySubCommand(const std::string & path) const;
 
     std::string fixPath(const std::string & path) const;
 
index 80d0346b2c0b6dc37752218c973c081cf12628e7..f5fc22da23c297cdd106ff26704751e732f5cf87 100644 (file)
@@ -255,7 +255,7 @@ namespace Batch {
     if( edt > 0 )
       tempOutputFile << "#BSUB -W " << getWallTime(edt) << endl ;
     if( mem > 0 )
-      tempOutputFile << "#BSUB -M " << mem << endl ;
+      tempOutputFile << "#BSUB -M " << mem*1024 << endl ;
     tempOutputFile << "#BSUB -n " << nbproc << endl ;
     size_t pos = workDir.find("$HOME");
     string baseDir;
index e28d5f73576df0d5da00407942dbd2737b1faa26..75125443d32c6ae18d0414faa578796746efc793 100644 (file)
@@ -256,7 +256,7 @@ namespace Batch {
     if( edt > 0 )
       tempOutputFile << "#PBS -l walltime=" << edt*60 << endl;
     if( mem > 0 )
-      tempOutputFile << "#PBS -l mem=" << mem << "kb" << endl;
+      tempOutputFile << "#PBS -l mem=" << mem << "MB" << endl;
     tempOutputFile << "#PBS -o " << workDir << "/logs/output.log." << rootNameToExecute << endl;
     tempOutputFile << "#PBS -e " << workDir << "/logs/error.log."  << rootNameToExecute << endl;
 
index e6da684fb531c184acd9a94b27ca45bbb7d3a5cd..c427f17c40adcbe1cc89980d3649b0ccb142b4db 100644 (file)
@@ -99,7 +99,7 @@ int main(int argc, char** argv)
     p[USER]          = user;
     p[NBPROC]        = 1;
     p[MAXWALLTIME]   = 1;
-    p[MAXRAMSIZE]    = 1000;
+    p[MAXRAMSIZE]    = 1;
     p[HOMEDIR]       = homedir;
     p[QUEUE]         = queue;
     job.setParametre(p);
@@ -125,7 +125,7 @@ int main(int argc, char** argv)
 
     if (state == FINISHED || state == FAILED) {
       cout << "Job " << jobid.__repr__() << " is done" << endl;
-      bm->importOutputFiles(job, ".");
+      bm->importOutputFiles(job, "resultdir/seconddirname");
     } else {
       cerr << "Timeout while executing job" << endl;
       return 1;
@@ -142,7 +142,7 @@ int main(int argc, char** argv)
   // test the result file
   try {
     SimpleParser resultParser;
-    resultParser.parse("result.txt");
+    resultParser.parse("resultdir/seconddirname/result.txt");
     cout << "Result:" << endl << resultParser;
     const string & envvar = resultParser.getValue("MYENVVAR");
     int result = resultParser.getValueAsInt("c");