You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by tn...@apache.org on 2015/06/17 09:37:14 UTC
mesos git commit: Fix handling large docker image info on inspect.
Repository: mesos
Updated Branches:
refs/heads/master 02160a1ce -> f13239e14
Fix handling large docker image info on inspect.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f13239e1
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f13239e1
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f13239e1
Branch: refs/heads/master
Commit: f13239e14f9a982465e93184ef6e34395eb561f4
Parents: 02160a1
Author: Timothy Chen <tn...@gmail.com>
Authored: Sat Jun 6 19:02:21 2015 +0000
Committer: Timothy Chen <tn...@apache.org>
Committed: Wed Jun 17 00:25:04 2015 -0700
----------------------------------------------------------------------
src/docker/docker.cpp | 28 +++++++++++++++++++++++-----
src/docker/docker.hpp | 4 +++-
2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/f13239e1/src/docker/docker.cpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp
index 7138329..4e13003 100644
--- a/src/docker/docker.cpp
+++ b/src/docker/docker.cpp
@@ -670,8 +670,13 @@ void Docker::_inspect(
return;
}
+ // 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());
+
s.get().status()
- .onAny([=]() { __inspect(cmd, promise, retryInterval, s.get()); });
+ .onAny([=]() { __inspect(cmd, promise, retryInterval, output, s.get()); });
}
@@ -679,10 +684,12 @@ void Docker::__inspect(
const string& cmd,
const Owned<Promise<Docker::Container>>& promise,
const Option<Duration>& retryInterval,
+ Future<string> output,
const Subprocess& s)
{
if (promise->future().hasDiscard()) {
promise->discard();
+ output.discard();
return;
}
@@ -694,6 +701,8 @@ void Docker::__inspect(
if (!status.isSome()) {
promise->fail("No status found from '" + cmd + "'");
} else if (status.get() != 0) {
+ output.discard();
+
if (retryInterval.isSome()) {
VLOG(1) << "Retrying inspect with non-zero status code. cmd: '"
<< cmd << "', interval: " << stringify(retryInterval.get());
@@ -718,7 +727,7 @@ void Docker::__inspect(
// Read to EOF.
CHECK_SOME(s.out());
- io::read(s.out().get())
+ output
.onAny([=](const Future<string>& output) {
___inspect(cmd, promise, retryInterval, output);
});
@@ -892,6 +901,11 @@ Future<Docker::Image> Docker::pull(
return Failure("Failed to execute '" + cmd + "': " + 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());
+
// We assume docker inspect to exit quickly and do not need to be
// discarded.
return s.get().status()
@@ -901,7 +915,8 @@ Future<Docker::Image> Docker::pull(
s.get(),
directory,
dockerImage,
- path));
+ path,
+ output));
}
@@ -910,14 +925,17 @@ Future<Docker::Image> Docker::_pull(
const Subprocess& s,
const string& directory,
const string& image,
- const string& path)
+ const string& path,
+ Future<string> output)
{
Option<int> status = s.status().get();
if (status.isSome() && status.get() == 0) {
- return io::read(s.out().get())
+ return output
.then(lambda::bind(&Docker::____pull, lambda::_1));
}
+ output.discard();
+
return Docker::__pull(docker, directory, image, path);
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/f13239e1/src/docker/docker.hpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp
index 7790d0f..fbae7bd 100644
--- a/src/docker/docker.hpp
+++ b/src/docker/docker.hpp
@@ -170,6 +170,7 @@ private:
const std::string& cmd,
const process::Owned<process::Promise<Container>>& promise,
const Option<Duration>& retryInterval,
+ process::Future<std::string> output,
const process::Subprocess& s);
static void ___inspect(
@@ -195,7 +196,8 @@ private:
const process::Subprocess& s,
const std::string& directory,
const std::string& image,
- const std::string& path);
+ const std::string& path,
+ process::Future<std::string> output);
static process::Future<Image> __pull(
const Docker& docker,