You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2014/08/16 03:31:35 UTC

[3/7] git commit: Cleaned up usage of io::read for new semantics.

Cleaned up usage of io::read for new semantics.

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


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

Branch: refs/heads/master
Commit: 0a57d25aafaeac5c1b4eb6f636fc2d68b24666ba
Parents: a8c37d4
Author: Benjamin Hindman <be...@gmail.com>
Authored: Fri Aug 15 15:10:51 2014 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Fri Aug 15 18:22:01 2014 -0700

----------------------------------------------------------------------
 src/docker/docker.cpp | 68 ++++++++++++++++------------------------------
 1 file changed, 24 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0a57d25a/src/docker/docker.cpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp
index 9ae229a..a4bad5b 100644
--- a/src/docker/docker.cpp
+++ b/src/docker/docker.cpp
@@ -63,23 +63,6 @@ static Future<T> failure(
 }
 
 
-// Asynchronously read stderr from subprocess.
-static Future<string> err(const Subprocess& s)
-{
-  CHECK_SOME(s.err());
-
-  Try<Nothing> nonblock = os::nonblock(s.err().get());
-  if (nonblock.isError()) {
-    return Failure("Cannot set nonblock for stderr: " + nonblock.error());
-  }
-
-  // TODO(tnachen): Although unlikely, it's possible to not capture
-  // the caller's failure message if io::read stderr fails. Can
-  // chain a callback to at least log.
-  return io::read(s.err().get());
-}
-
-
 static Future<Nothing> _checkError(const string& cmd, const Subprocess& s)
 {
   Option<int> status = s.status().get();
@@ -89,8 +72,9 @@ static Future<Nothing> _checkError(const string& cmd, const Subprocess& s)
 
   if (status.get() != 0) {
     // TODO(tnachen): Consider returning stdout as well.
-    return err(s).then(
-        lambda::bind(failure<Nothing>, cmd, status.get(), lambda::_1));
+    CHECK_SOME(s.err());
+    return io::read(s.err().get())
+      .then(lambda::bind(failure<Nothing>, cmd, status.get(), lambda::_1));
   }
 
   return Nothing();
@@ -101,7 +85,8 @@ static Future<Nothing> _checkError(const string& cmd, const Subprocess& s)
 // subprocess.
 static Future<Nothing> checkError(const string& cmd, const Subprocess& s)
 {
-  return s.status().then(lambda::bind(_checkError, cmd, s));
+  return s.status()
+    .then(lambda::bind(_checkError, cmd, s));
 }
 
 
@@ -417,6 +402,7 @@ Future<Nothing> Docker::rm(
 Future<Docker::Container> Docker::inspect(const string& container) const
 {
   const string cmd =  path + " inspect " + container;
+
   VLOG(1) << "Running " << cmd;
 
   Try<Subprocess> s = subprocess(
@@ -446,22 +432,19 @@ Future<Docker::Container> Docker::_inspect(
   if (!status.isSome()) {
     return Failure("No status found from '" + cmd + "'");
   } else if (status.get() != 0) {
-    return err(s).then(
-        lambda::bind(
-            failure<Docker::Container>,
-            cmd,
-            status.get(),
-            lambda::_1));
+    CHECK_SOME(s.err());
+    return io::read(s.err().get())
+      .then(lambda::bind(
+                failure<Docker::Container>,
+                cmd,
+                status.get(),
+                lambda::_1));
   }
 
   // Read to EOF.
   CHECK_SOME(s.out());
-  Try<Nothing> nonblock = os::nonblock(s.out().get());
-  if (nonblock.isError()) {
-    return Failure("Failed to accept nonblock stdout:" + nonblock.error());
-  }
-  Future<string> output = io::read(s.out().get());
-  return output.then(lambda::bind(&Docker::__inspect, lambda::_1));
+  return io::read(s.out().get())
+    .then(lambda::bind(&Docker::__inspect, lambda::_1));
 }
 
 
@@ -576,22 +559,19 @@ Future<list<Docker::Container> > Docker::_ps(
   if (!status.isSome()) {
     return Failure("No status found from '" + cmd + "'");
   } else if (status.get() != 0) {
-    return err(s).then(
-        lambda::bind(
-            failure<list<Docker::Container> >,
-            cmd,
-            status.get(),
-            lambda::_1));
+    CHECK_SOME(s.err());
+    return io::read(s.err().get())
+      .then(lambda::bind(
+                failure<list<Docker::Container> >,
+                cmd,
+                status.get(),
+                lambda::_1));
   }
 
   // Read to EOF.
   CHECK_SOME(s.out());
-  Try<Nothing> nonblock = os::nonblock(s.out().get());
-  if (nonblock.isError()) {
-    return Failure("Failed to accept nonblock stdout:" + nonblock.error());
-  }
-  Future<string> output = io::read(s.out().get());
-  return output.then(lambda::bind(&Docker::__ps, docker, prefix, lambda::_1));
+  return io::read(s.out().get())
+    .then(lambda::bind(&Docker::__ps, docker, prefix, lambda::_1));
 }