Repository: mesos Updated Branches: refs/heads/master fe39e7b2d -> 54ad73e1a
Perform read right after subprocess for docker ps. Perform read right after subprocess for docker ps. Review: https://reviews.apache.org/r/26487 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/54ad73e1 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/54ad73e1 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/54ad73e1 Branch: refs/heads/master Commit: 54ad73e1adb22fd84fdd1dfb5c28175f743d1960 Parents: fe39e7b Author: Timothy Chen <[email protected]> Authored: Sat Oct 11 16:40:08 2014 -0700 Committer: Timothy Chen <[email protected]> Committed: Sat Oct 11 16:40:08 2014 -0700 ---------------------------------------------------------------------- src/docker/docker.cpp | 16 +++++++++++----- src/docker/docker.hpp | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/54ad73e1/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index 20be6cd..1c0d6e6 100644 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -677,8 +677,13 @@ Future<list<Docker::Container> > Docker::ps( return Failure(s.error()); } + // Start reading from stdout so writing to the pipe won't block + // to handle cases where the output is larger than the pipe + // capacity. + const Future<string>& output = io::read(s.get().out().get()); + return s.get().status() - .then(lambda::bind(&Docker::_ps, *this, cmd, s.get(), prefix)); + .then(lambda::bind(&Docker::_ps, *this, cmd, s.get(), prefix, output)); } @@ -686,13 +691,16 @@ Future<list<Docker::Container> > Docker::_ps( const Docker& docker, const string& cmd, const Subprocess& s, - const Option<string>& prefix) + const Option<string>& prefix, + Future<string>& output) { Option<int> status = s.status().get(); if (!status.isSome()) { + output.discard(); return Failure("No status found from '" + cmd + "'"); } else if (status.get() != 0) { + output.discard(); CHECK_SOME(s.err()); return io::read(s.err().get()) .then(lambda::bind( @@ -703,9 +711,7 @@ Future<list<Docker::Container> > Docker::_ps( } // Read to EOF. - CHECK_SOME(s.out()); - return io::read(s.out().get()) - .then(lambda::bind(&Docker::__ps, docker, prefix, lambda::_1)); + return output.then(lambda::bind(&Docker::__ps, docker, prefix, lambda::_1)); } http://git-wip-us.apache.org/repos/asf/mesos/blob/54ad73e1/src/docker/docker.hpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp index 7972eda..5ce90f6 100644 --- a/src/docker/docker.hpp +++ b/src/docker/docker.hpp @@ -143,7 +143,8 @@ private: const Docker& docker, const std::string& cmd, const process::Subprocess& s, - const Option<std::string>& prefix); + const Option<std::string>& prefix, + process::Future<std::string>& output); static process::Future<std::list<Container> > __ps( const Docker& docker,
