Salome HOME
Add remove working directory feature.
authorOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Wed, 25 Oct 2017 09:40:37 +0000 (11:40 +0200)
committerOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Wed, 25 Oct 2017 09:40:37 +0000 (11:40 +0200)
src/Core/BatchManager.cxx
src/Core/BatchManager.hxx
src/Core/CommunicationProtocol.cxx
src/Core/CommunicationProtocol.hxx

index 8194c16d9c7b84287a60229def4632808fb5dd89..4645ffbb554f0ae26ca24cb9c41f9c7f4849d009 100644 (file)
@@ -315,6 +315,21 @@ namespace Batch {
     return ret;
   }
 
+  void BatchManager::clearWorkingDir( const Job & job)
+  {
+    Parametre params = job.getParametre();
+
+    string wd = params[WORKDIR];
+    if(!wd.empty() && wd != "/")
+    {
+      int status = _protocol.removeDirectory(wd, _hostname, _username);
+      if (status)
+        LOG("removeDirectory command failed. Status is: " << status);
+    }
+    else
+      LOG("removeDirectory command failed. Invalid working directory: " << wd);
+  }
+
   MpiImpl *BatchManager::FactoryMpiImpl(string mpiImpl)
   {
     if(mpiImpl == "lam")
index c22336386485c3bec98aa70fcdec4b3b5373d123..7d78f9c35e439ad03d68de8134e35d550979cf71 100644 (file)
@@ -79,6 +79,7 @@ namespace Batch {
     bool importDumpStateFile( const Job & job, const std::string directory );
     // copier le fichier work_file à partir du working_directory vers directory
     virtual bool importWorkFile( const Job & job, const std::string& work_file, const std::string& directory );
+    virtual void clearWorkingDir( const Job & job );
 
     // Get the underlying communication protocol
     const CommunicationProtocol & getProtocol() const;
index 380f7807f4ca8a2ab2c5de16e3bee976b7941b96..57a1d527e70a12c7c190a8e90bc8d754a7a51d51 100644 (file)
@@ -114,6 +114,11 @@ namespace Batch {
     return string("rm ") + path;
   }
 
+  string CommunicationProtocol::getRemoveDirectorySubCommand(const string & path) const
+  {
+    return string("rm -fR ") + path;
+  }
+
   string CommunicationProtocol::getMakeDirectorySubCommand(const string & path) const
   {
     return string("mkdir -p ") + path;
@@ -129,6 +134,16 @@ namespace Batch {
     return status;
   }
 
+  int CommunicationProtocol::removeDirectory(const std::string & path,
+                                        const std::string & host,
+                                        const std::string & user) const
+  {
+    string command = getExecCommand(getRemoveDirectorySubCommand(path), host, user);
+    LOG(command);
+    int status = system(command.c_str());
+    return status;
+  }
+
   int CommunicationProtocol::makeDirectory(const std::string & path,
                                            const std::string & host,
                                            const std::string & user) const
index 5f6356b9bc6cc58e68dae77f9eaae124dc08ae05..3dc61331d02d497609110be8e0c11b842609097e 100644 (file)
@@ -64,6 +64,10 @@ namespace Batch {
                            const std::string & host,
                            const std::string & user) const;
 
+    virtual int removeDirectory(const std::string & path,
+                                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;
@@ -83,6 +87,8 @@ namespace Batch {
 
     virtual std::string getRemoveSubCommand(const std::string & path) const;
 
+    virtual std::string getRemoveDirectorySubCommand(const std::string & path) const;
+
     virtual std::string getMakeDirectorySubCommand(const std::string & path) const;
 
     std::string commandStringFromArgs(const std::vector<std::string> & args) const;