]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
New access protocol rsync.
authorOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Mon, 5 Feb 2018 16:55:16 +0000 (17:55 +0100)
committerOvidiu Mircescu <ovidiu.mircescu@edf.fr>
Thu, 15 Feb 2018 16:14:13 +0000 (17:14 +0100)
Protocol used by SALOME_Launcher for file copy.
Needs libbatch upgrade.

idl/SALOME_ResourcesManager.idl
src/Launcher/Launcher.cxx
src/Launcher/Launcher_Job.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Parser.cxx
src/ResourcesManager/SALOME_ResourcesCatalog_Parser.hxx

index ee7461c3fc49c991da37ce1a73d0d918bb99b6da..2c92ceba0a1ee68fdeb56a883503af766a3b68f8 100644 (file)
@@ -110,8 +110,11 @@ struct ResourceDefinition
   string hostname;
   //! Type of the resource ("cluster" or "single_machine")
   string type;
-  //! protocol to connect to the resource
-  //! protocol used to start a remote container (ssh or rsh)
+  //! protocol to connect to the resource and to start a remote container
+  //! Possible values:
+  //!   "rsh"   : uses rsh and rcp
+  //!   "ssh"   : uses ssh and scp
+  //!   "rsync" : uses ssh and rsync
   string protocol;
   //! login name to use to start a remote container
   string username;
index b6737b1774036b9321836312d5db5c52eb080856..5db6b8df3006ff539e4fca657c5b40bd0f537ae6 100644 (file)
@@ -480,6 +480,9 @@ Launcher_cpp::FactoryBatchManager(ParserResourcesType& params)
     case ssh:
       protocol = Batch::SSH;
       break;
+    case rsync:
+      protocol = Batch::RSYNC;
+      break;
     default:
       throw LauncherException("Unknown protocol for this resource");
       break;
index ed944325dbf46db0569344ec9f5a074664fbee59..07241c30eb5905df68805bc7fceef6e813d69793 100644 (file)
@@ -665,16 +665,19 @@ Launcher::Job::common_job_params()
     std::string local_file;
     if (file.substr(0, 1) == std::string("/"))
       local_file = file;
+    else if (file.substr(0, 1) == std::string("-")) // using rsync options
+      local_file = file;
     else
 #ifndef WIN32
-      local_file = _local_directory + "/" + file;
+      // '/./' is used by rsync to find the root of the relative path
+      // /a/b/./c/f -> _working_directory/c/f
+      local_file = _local_directory + "/./" + file;
 #else
       local_file = file;
 #endif
 
     // remote file -> get only file name from in_files
-    size_t found = file.find_last_of("/");
-    std::string remote_file = _work_directory + "/" + file.substr(found+1);
+    std::string remote_file = _work_directory + "/";
 
     params[Batch::INFILE] += Batch::Couple(local_file, remote_file);
   }
@@ -692,10 +695,16 @@ Launcher::Job::common_job_params()
       size_t found = file.find_last_of("/");
       local_file = file.substr(found+1);
     }
+    else if (file.substr(0, 1) == std::string("-")) // using rsync options
+    {
+      remote_file = file;
+      local_file = "";
+    }
     else
     {
-      remote_file = _work_directory + "/" + file;
-      local_file = file;
+      // '/./' is used by rsync to find the root of the relative path
+      remote_file = _work_directory + "/./" + file;
+      local_file = "";
     }
 
     params[Batch::OUTFILE] += Batch::Couple(local_file, remote_file);
index 214faa398a04d5027a6ac9cb0cb78001c68e0b31..552c01f88f58b037a475a1262de8f493b2c91dd6 100644 (file)
@@ -168,6 +168,8 @@ std::string ParserResourcesType::protocolToString(AccessProtocolType protocol)
     return "pbsdsh";
   case blaunch:
     return "blaunch";
+  case rsync:
+    return "rsync";
   default:
     throw ResourcesException("Unknown protocol");
   }
@@ -187,6 +189,8 @@ AccessProtocolType ParserResourcesType::stringToProtocol(const std::string & pro
     return pbsdsh;
   else if (protocolStr == "blaunch")
     return blaunch;
+  else if (protocolStr == "rsync")
+    return rsync;
   else
     throw ResourcesException((string("Unknown protocol ") + protocolStr).c_str());
 }
index cf44f79c5982f2f198b98f59f11682463bae1484..fcc68baab6667b6d9ed12d10d586c2b3b4eb18dd 100755 (executable)
@@ -41,7 +41,7 @@
 #pragma warning(disable:4251) // Warning DLL Interface ...
 #endif
 
-enum AccessProtocolType {sh, rsh, ssh, srun, pbsdsh, blaunch};
+enum AccessProtocolType {sh, rsh, ssh, srun, pbsdsh, blaunch, rsync};
 
 enum ResourceType {cluster, single_machine};