]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
Removed dependency on Basics from Batch. Fixed --with-onlylauncher mode.
authorbarate <barate>
Fri, 6 Mar 2009 10:31:17 +0000 (10:31 +0000)
committerbarate <barate>
Fri, 6 Mar 2009 10:31:17 +0000 (10:31 +0000)
13 files changed:
configure.ac
src/Batch/Batch_BatchManagerCatalog.cxx
src/Batch/Batch_BatchManager_eClient.cxx
src/Batch/Batch_BatchManager_eClient.hxx
src/Batch/Batch_BatchManager_eLSF.cxx
src/Batch/Batch_BatchManager_eLSF.hxx
src/Batch/Batch_BatchManager_ePBS.cxx
src/Batch/Batch_BatchManager_ePBS.hxx
src/Batch/Batch_BatchManager_eSGE.cxx
src/Batch/Batch_BatchManager_eSGE.hxx
src/Batch/Makefile.am
src/Launcher/Makefile.am
src/ResourcesManager/Makefile.am

index 844d28f585ea9d781e6522a421b2ee4b8524688e..fa01feeaa8df453e43c71fe5fc2c1055b7982cb1 100644 (file)
@@ -88,8 +88,9 @@ AM_CONDITIONAL(CORBA_GEN, test x$corba_gen = xtrue)
 
 # ---- option to build only launcher, resources manager and batch classes
 AC_ARG_WITH(onlylauncher,
-           --with-onlylauncher,
-           [],[with_onlylauncher="no"])
+       [AC_HELP_STRING([--with-onlylauncher],[Build only launcher, resources manager and batch classes [default=no]])],
+       [],
+       [with_onlylauncher="no"])
 AM_CONDITIONAL(WITHONLYLAUNCHER, test x$with_onlylauncher = xyes)
 
 # ----------------------------------------------------------------------------
index e2d341ec668b0f152a1834fc1e1be03aa25b15e6..c9e5ea7ed3bbe691608d0c2944fe69a864651423 100644 (file)
@@ -20,7 +20,7 @@
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 /*
- * BatchManagerCatalog.cxx : 
+ * BatchManagerCatalog.cxx :
  *
  * Auteur : Ivan DUTKA-MALEN - EDF R&D
  * Date   : Septembre 2004
@@ -39,7 +39,7 @@ namespace Batch {
 
   pthread_mutex_t BatchManagerCatalog::_mutex = PTHREAD_MUTEX_INITIALIZER;
   std::map<string, FactBatchManager *> * BatchManagerCatalog::_p_catalog = 0;
-  BatchManagerCatalog BatchManagerCatalog::theCatalog;
+//  BatchManagerCatalog BatchManagerCatalog::theCatalog;
 
   // Constructeur
   BatchManagerCatalog::BatchManagerCatalog()
@@ -50,7 +50,12 @@ namespace Batch {
   // Destructeur
   BatchManagerCatalog::~BatchManagerCatalog()
   {
-    delete BatchManagerCatalog::_p_catalog;
+    // Note (RB, 6mar09) : this deletion can cause big memory problems as the pointer
+    // may have been destroyed before this call to delete, and delete can be called
+    // several times. So it's better to remove it for now, even if there is a (small)
+    // memory leak.
+    // TODO: Replace that by a clean singleton implementation
+//    delete BatchManagerCatalog::_p_catalog;
   }
 
   // Functor
index ebdd308950a307a8fbad9adadb3664ccb4826972..5ff48dd1f4b51b363f9ccf5be7abb5ea390f47db 100644 (file)
 * Auteur : Bernard SECHER - CEA DEN
 * Mail   : mailto:bernard.secher@cea.fr
 * Date   : Thu Apr 24 10:17:22 2008
-* Projet : PAL Salome 
+* Projet : PAL Salome
 *
 */
 
 #include "Batch_BatchManager_eClient.hxx"
-#include "Basics_DirUtils.hxx"
+#include "Batch_RunTimeException.hxx"
+#include "Batch_NotYetImplementedException.hxx"
 
 #include <iostream>
 #include <fstream>
@@ -179,10 +180,10 @@ namespace Batch {
       command += directory;
       cerr << command.c_str() << endl;
       status = system(command.c_str());
-      if(status) 
+      if(status)
       {
         // Try to get what we can (logs files)
-        // throw BatchException("Error of connection on remote host");    
+        // throw BatchException("Error of connection on remote host");
         std::string mess("Copy command failed ! status is :");
         ostringstream status_str;
         status_str << status;
@@ -216,31 +217,36 @@ namespace Batch {
     }
   }
 
-  string BatchManager_eClient::BuildTemporaryFileName() const
-  {
-    //build more complex file name to support multiple salome session
-    string aFileName = Kernel_Utils::GetTmpFileName();
-#ifndef WIN32
-    aFileName += ".sh";
-#else
-    aFileName += ".bat";
-#endif
-    return aFileName;
-  }
-
-  void BatchManager_eClient::RmTmpFile(std::string & TemporaryFileName)
+  /**
+   * This method creates a temporary file and opens an output stream to write into this file.
+   * The file is created with the pattern "/tmp/batch_XXXXXX" where the X's are replaced by random
+   * characters. The caller is responsible for closing and deleting the file when it is no more used.
+   * \param outputStream an output stream that will be opened for writing in the temporary file. If
+   * the stream is already open, it will be closed first.
+   * \return the name of the created file.
+   */
+  string BatchManager_eClient::createAndOpenTemporaryFile(ofstream & outputStream) const
   {
+    string fileName;
 #ifdef WIN32
-    string command = "del /F ";
+    throw NotYetImplementedException("Temporary file creation in Batch library has not been ported to Windows yet");
 #else
-    string command = "rm ";
+    char * tmpFileName = strdup("/tmp/batch_XXXXXX");
+    int fd = mkstemp(tmpFileName);
+    if (fd == -1)
+    {
+      throw RunTimeException("Can't create temporary file");
+    }
+
+    if (outputStream.is_open())
+      outputStream.close();
+    outputStream.open(tmpFileName);
+    close(fd);  // Close the file descriptor so that the file is not opened twice
+
+    fileName = tmpFileName;
+    delete[] tmpFileName;
 #endif
-    command += TemporaryFileName;
-    char *temp = strdup(command.c_str());
-    int lgthTemp = strlen(temp);
-    temp[lgthTemp - 3] = '*';
-    temp[lgthTemp - 2] = '\0';
-    system(temp);
-    free(temp);
+    return fileName;
   }
+
 }
index 172ca4abd4ab96710e783717c6b94e5766316a2a..c8f401386611db6de2c17afa69882343c680f54a 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -47,7 +47,7 @@ namespace Batch {
   {
   public:
     const std::string msg;
-    
+
     EmulationException(const std::string m) : msg(m) {}
   };
 
@@ -64,8 +64,7 @@ namespace Batch {
     std::string _username; // username to access _hostname
     MpiImpl *_mpiImpl; // Mpi implementation to launch executable in batch script
 
-    std::string BuildTemporaryFileName() const;
-    void RmTmpFile(std::string & TemporaryFileName);
+    std::string createAndOpenTemporaryFile(std::ofstream & outputStream) const;
     MpiImpl* FactoryMpiImpl(std::string mpiImpl) throw(EmulationException);
     void exportInputFiles(const Job & job) throw(EmulationException);
 
index 009d4c6a43ee578c91d2908d2fae69e8ab18d845..e48690c47da107c228e7dab07eab8d198ed59d2f 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -120,7 +120,7 @@ namespace Batch {
     FILE *fp = fopen(logFile.c_str(),"r");
     fgets( line, 128, fp);
     fclose(fp);
-    
+
     string sline(line);
     int p10 = sline.find("<");
     int p20 = sline.find(">");
@@ -137,7 +137,7 @@ namespace Batch {
     int ref;
     istringstream iss(jobid.getReference());
     iss >> ref;
-    
+
     // define command to submit batch
     string command;
     command = _protocol;
@@ -159,7 +159,7 @@ namespace Batch {
 
     cerr << "jobId = " << ref << "killed" << endl;
   }
-   
+
   // Methode pour le controle des jobs : suspend un job en file d'attente
   void BatchManager_eLSF::holdJob(const JobId & jobid)
   {
@@ -244,7 +244,7 @@ namespace Batch {
     throw EmulationException("Not yet implemented");
   }
 
-  void BatchManager_eLSF::buildBatchScript(const Job & job) throw(EmulationException)
+  void BatchManager_eLSF::buildBatchScript(const Job & job)
   {
 #ifndef WIN32 //TODO: need for porting on Windows
     int status;
@@ -276,9 +276,8 @@ namespace Batch {
       rootNameToExecute = "command";
     }
 
-    std::string TmpFileName = BuildTemporaryFileName();
     ofstream tempOutputFile;
-    tempOutputFile.open(TmpFileName.c_str(), ofstream::out );
+    std::string TmpFileName = createAndOpenTemporaryFile(tempOutputFile);
 
     tempOutputFile << "#! /bin/sh -f" << endl ;
     if (queue != "")
@@ -307,7 +306,7 @@ namespace Batch {
       tempOutputFile << "source " << env["SOURCEFILE"] << endl ;
       tempOutputFile << env["COMMAND"];
     }
-      
+
     tempOutputFile.flush();
     tempOutputFile.close();
 #ifdef WIN32
@@ -340,11 +339,11 @@ namespace Batch {
     cerr << command.c_str() << endl;
     status = system(command.c_str());
     if(status)
-      throw EmulationException("Error of connection on remote host");    
+      throw EmulationException("Error of connection on remote host");
 
-    RmTmpFile(TmpFileName);
+    remove(TmpFileName.c_str());
 #endif
-    
+
   }
 
   std::string BatchManager_eLSF::getWallTime(const long edt)
index 599d90c686fece84db3954889261414622633f08..d09db3d9bafc507fc149b5c1f84848d87cfea553 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -77,7 +77,7 @@ namespace Batch {
 
 
   protected:
-    void buildBatchScript(const Job & job) throw(EmulationException);
+    void buildBatchScript(const Job & job);
     std::string getWallTime(const long edt);
 
   private:
index 177319c32c477a9762a725c2cdcbcfaadfac75f5..68d1cab073d4512bf5a9978ee90a00bb0786cf34 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -115,7 +115,7 @@ namespace Batch {
     FILE *fp = fopen(logFile.c_str(),"r");
     fgets( line, 128, fp);
     fclose(fp);
-    
+
     string sline(line);
     int pos = sline.find(".");
     string strjob;
@@ -135,7 +135,7 @@ namespace Batch {
     int ref;
     istringstream iss(jobid.getReference());
     iss >> ref;
-    
+
     // define command to submit batch
     string command;
     command = _protocol;
@@ -157,7 +157,7 @@ namespace Batch {
 
     cerr << "jobId = " << ref << "killed" << endl;
   }
-   
+
   // Methode pour le controle des jobs : suspend un job en file d'attente
   void BatchManager_ePBS::holdJob(const JobId & jobid)
   {
@@ -238,7 +238,7 @@ namespace Batch {
     throw EmulationException("Not yet implemented");
   }
 
-  void BatchManager_ePBS::buildBatchScript(const Job & job) throw(EmulationException)
+  void BatchManager_ePBS::buildBatchScript(const Job & job)
   {
 #ifndef WIN32 //TODO: need for porting on Windows
     int status;
@@ -270,9 +270,8 @@ namespace Batch {
       rootNameToExecute = "command";
     }
 
-    std::string TmpFileName = BuildTemporaryFileName();
     ofstream tempOutputFile;
-    tempOutputFile.open(TmpFileName.c_str(), ofstream::out );
+    std::string TmpFileName = createAndOpenTemporaryFile(tempOutputFile);
 
     tempOutputFile << "#! /bin/sh -f" << endl;
     if (queue != "")
@@ -300,7 +299,7 @@ namespace Batch {
       tempOutputFile << "source " << env["SOURCEFILE"] << endl ;
       tempOutputFile << env["COMMAND"];
     }
-      
+
     tempOutputFile.flush();
     tempOutputFile.close();
 #ifdef WIN32
@@ -333,10 +332,10 @@ namespace Batch {
     cerr << command.c_str() << endl;
     status = system(command.c_str());
     if(status)
-      throw EmulationException("Error of connection on remote host");    
+      throw EmulationException("Error of connection on remote host");
 
-    RmTmpFile(TmpFileName);
-#endif    
+    remove(TmpFileName.c_str());
+#endif
   }
 
 }
index 9effa53cf6dc544df48497768c4b8e038bb8ec3a..661b36829551c249d7bbb66c1e1210d10519fc4c 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -77,7 +77,7 @@ namespace Batch {
 
 
   protected:
-    void buildBatchScript(const Job & job) throw(EmulationException);
+    void buildBatchScript(const Job & job);
 
   private:
 
index 56130df01c4b6b9d46f69d910253626732789bd2..cb4f9604d9456ec6af7e3ebb6ab7ac1a8f5416c8 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -113,7 +113,7 @@ namespace Batch {
     FILE *fp = fopen(logFile.c_str(),"r");
     fgets( line, 128, fp);
     fclose(fp);
-    
+
     string strjob;
     istringstream iss(line);
     iss >> strjob >> strjob >> strjob;
@@ -129,7 +129,7 @@ namespace Batch {
     int ref;
     istringstream iss(jobid.getReference());
     iss >> ref;
-    
+
     // define command to submit batch
     string command;
     command = _protocol;
@@ -151,7 +151,7 @@ namespace Batch {
 
     cerr << "jobId = " << ref << "killed" << endl;
   }
-   
+
   // Methode pour le controle des jobs : suspend un job en file d'attente
   void BatchManager_eSGE::holdJob(const JobId & jobid)
   {
@@ -232,7 +232,7 @@ namespace Batch {
     throw EmulationException("Not yet implemented");
   }
 
-  void BatchManager_eSGE::buildBatchScript(const Job & job) throw(EmulationException)
+  void BatchManager_eSGE::buildBatchScript(const Job & job)
   {
 #ifndef WIN32
     //TODO porting on Win32 platform
@@ -263,9 +263,8 @@ namespace Batch {
       rootNameToExecute = "command";
     }
 
-    std::string TmpFileName = BuildTemporaryFileName();
     ofstream tempOutputFile;
-    tempOutputFile.open(TmpFileName.c_str(), ofstream::out );
+    std::string TmpFileName = createAndOpenTemporaryFile(tempOutputFile);
 
     tempOutputFile << "#! /bin/sh -f" << endl;
     if (queue != "")
@@ -294,7 +293,7 @@ namespace Batch {
       tempOutputFile << "source " << env["SOURCEFILE"] << endl ;
       tempOutputFile << env["COMMAND"];
     }
-      
+
     tempOutputFile.flush();
     tempOutputFile.close();
     chmod(TmpFileName.c_str(), 0x1ED);
@@ -322,10 +321,10 @@ namespace Batch {
     cerr << command.c_str() << endl;
     status = system(command.c_str());
     if(status)
-      throw EmulationException("Error of connection on remote host");    
+      throw EmulationException("Error of connection on remote host");
 
-    RmTmpFile(TmpFileName);
-#endif //WIN32    
+    remove(TmpFileName.c_str());
+#endif //WIN32
   }
 
   std::string BatchManager_eSGE::getWallTime(const long edt)
index c2a0feccaeb6f291ef765e65e468b0411a4b821a..4f7ca968508f5858d2d129ecf988d5321f84f785 100644 (file)
@@ -25,7 +25,7 @@
  * Auteur : Bernard SECHER - CEA DEN
  * Mail   : mailto:bernard.secher@cea.fr
  * Date   : Thu Apr 24 10:17:22 2008
- * Projet : PAL Salome 
+ * Projet : PAL Salome
  *
  */
 
@@ -76,7 +76,7 @@ namespace Batch {
 
 
   protected:
-    void buildBatchScript(const Job & job) throw(EmulationException);
+    void buildBatchScript(const Job & job);
     std::string getWallTime(const long edt);
 
   private:
index e0bc1b719ee4c0e3d57aae94225ebe584687eeef..8d115a68fff492db3fc6de0d83d932b51157c999 100644 (file)
@@ -119,21 +119,12 @@ LIB_SRC = \
        MpiImpl.cxx
 
 
-LIB_CPPFLAGS = \
-       ${PYTHON_INCLUDES}
+LIB_CPPFLAGS = ${PYTHON_INCLUDES}
 if !WITHONLYLAUNCHER
-  LIB_CPPFLAGS += \
-       -I$(srcdir)/../Basics \
-       -I$(top_builddir)/salome_adm/unix
+  LIB_CPPFLAGS += -I$(top_builddir)/salome_adm/unix
 endif
 
-LIB_LIBADD =
-if !WITHONLYLAUNCHER
-  LIB_LIBADD   += \
-       ../Basics/libSALOMEBasics.la
-endif
-
-LIB_LIBADD   += $(PYTHON_LIBS)
+LIB_LIBADD = $(PYTHON_LIBS)
 
 #
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index ab797d7039167ac2363bd938a5568114038d1f8c..97e08d2a0b98d353f36f737ca5e788d988accc48 100644 (file)
@@ -123,7 +123,7 @@ libLauncher_la_LDFLAGS  =\
 
 libLauncher_la_LIBADD =\
        ../Batch/libSalomeBatch.la \
-       ../ResourcesManager/libSalomeResourcesManager.la \
+       ../ResourcesManager/libResourcesManager.la \
        @MPI_LIBS@ \
        @LIBXML_LIBS@
 
index f24d8355de6e7fd92fb5818138983e9fb727abe1..469acb6579219400408caa39f1bacfe329bd2703 100755 (executable)
@@ -101,5 +101,4 @@ libResourcesManager_la_CPPFLAGS =\
 
 libResourcesManager_la_LDFLAGS = -no-undefined -version-info=0:0:0
 libResourcesManager_la_LIBADD  =\
-       ../Utils/libOpUtil.la \
        @LIBXML_LIBS@