You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2015/12/15 19:56:03 UTC

[4/7] mesos git commit: Added a helper for HDFS client to shell out commands.

Added a helper for HDFS client to shell out commands.

Code is copied from https://reviews.apache.org/r/40559/.

Review: https://reviews.apache.org/r/40941/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b420b396
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b420b396
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b420b396

Branch: refs/heads/master
Commit: b420b396d1fa1e0adac4ecde2e72788b81bf5ad5
Parents: 925e99e
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Dec 14 11:42:02 2015 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Dec 15 10:55:33 2015 -0800

----------------------------------------------------------------------
 src/hdfs/hdfs.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/b420b396/src/hdfs/hdfs.cpp
----------------------------------------------------------------------
diff --git a/src/hdfs/hdfs.cpp b/src/hdfs/hdfs.cpp
index c32c2ae..e5e7097 100644
--- a/src/hdfs/hdfs.cpp
+++ b/src/hdfs/hdfs.cpp
@@ -15,8 +15,13 @@
 // limitations under the License
 
 #include <string>
+#include <tuple>
 #include <vector>
 
+#include <process/collect.hpp>
+#include <process/io.hpp>
+#include <process/subprocess.hpp>
+
 #include <stout/bytes.hpp>
 #include <stout/check.hpp>
 #include <stout/error.hpp>
@@ -37,6 +42,58 @@ using std::string;
 using std::vector;
 
 
+struct CommandResult
+{
+  Option<int> status;
+  string out;
+  string err;
+};
+
+
+static Future<CommandResult> result(const Subprocess& s)
+{
+  CHECK_SOME(s.out());
+  CHECK_SOME(s.err());
+
+  return await(
+      s.status(),
+      io::read(s.out().get()),
+      io::read(s.err().get()))
+    .then([](const std::tuple<
+        Future<Option<int>>,
+        Future<string>,
+        Future<string>>& t) -> Future<CommandResult> {
+      Future<Option<int>> status = std::get<0>(t);
+      if (!status.isReady()) {
+        return Failure(
+            "Failed to get the exit status of the subprocess: " +
+            (status.isFailed() ? status.failure() : "discarded"));
+      }
+
+      Future<string> output = std::get<1>(t);
+      if (!output.isReady()) {
+        return Failure(
+            "Failed to read stdout from the subprocess: " +
+            (output.isFailed() ? output.failure() : "discarded"));
+      }
+
+      Future<string> error = std::get<2>(t);
+      if (!error.isReady()) {
+        return Failure(
+            "Failed to read stderr from the subprocess: " +
+            (error.isFailed() ? error.failure() : "discarded"));
+      }
+
+      CommandResult result;
+      result.status = status.get();
+      result.out = output.get();
+      result.err = error.get();
+
+      return result;
+    });
+}
+
+
 Try<Owned<HDFS>> HDFS::create(const Option<string>& _hadoop)
 {
   // Determine the hadoop client to use. If the user has specified