Refactored docker::ps(), added 'prefix' option to inspect only interested containers.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d5f9c58d Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d5f9c58d Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d5f9c58d Branch: refs/heads/master Commit: d5f9c58de7ed77162df518bb0a206a94b83a28c0 Parents: 78d8e40 Author: Yifan Gu <[email protected]> Authored: Wed Jul 2 18:28:54 2014 -0700 Committer: Benjamin Hindman <[email protected]> Committed: Mon Aug 4 15:08:16 2014 -0700 ---------------------------------------------------------------------- src/docker/docker.cpp | 21 ++++++++++++++++----- src/docker/docker.hpp | 7 +++++-- src/slave/containerizer/docker.cpp | 2 +- src/tests/docker_containerizer_tests.cpp | 3 ++- 4 files changed, 24 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/d5f9c58d/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index 1a2d1d2..c46df07 100644 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -281,7 +281,9 @@ Future<Docker::Container> Docker::_inspect(const Subprocess& s) } -Future<list<Docker::Container> > Docker::ps(const bool all) const +Future<list<Docker::Container> > Docker::ps( + const bool all, + const Option<string>& prefix) const { string cmd = all ? " ps -a" : " ps"; @@ -298,13 +300,14 @@ Future<list<Docker::Container> > Docker::ps(const bool all) const } return s.get().status() - .then(lambda::bind(&Docker::_ps, *this, s.get())); + .then(lambda::bind(&Docker::_ps, *this, s.get(), prefix)); } Future<list<Docker::Container> > Docker::_ps( const Docker& docker, - const Subprocess& s) + const Subprocess& s, + const Option<string>& prefix) { // Check the exit status of 'docker ps'. CHECK_READY(s.status()); @@ -338,13 +341,21 @@ Future<list<Docker::Container> > Docker::_ps( list<Future<Docker::Container> > futures; foreach (const string& line, lines) { - // Inspect the container. - futures.push_back(docker.inspect(strings::split(line, " ")[0])); + // Inspect the containers that we are interested in depending on + // whether or not a 'prefix' was specified. + vector<string> columns = strings::split(strings::trim(line), " "); + string name = columns[columns.size() - 1]; + if (prefix.isNone()) { + futures.push_back(docker.inspect(name)); + } else if (strings::startsWith(name, prefix.get())) { + futures.push_back(docker.inspect(name)); + } } return collect(futures); } + Future<std::string> Docker::info() const { std::string cmd = path + " info"; http://git-wip-us.apache.org/repos/asf/mesos/blob/d5f9c58d/src/docker/docker.hpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.hpp b/src/docker/docker.hpp index 9d2205c..89840af 100644 --- a/src/docker/docker.hpp +++ b/src/docker/docker.hpp @@ -26,6 +26,7 @@ #include <process/subprocess.hpp> #include <stout/json.hpp> +#include <stout/none.hpp> #include <stout/nothing.hpp> #include <stout/option.hpp> @@ -87,7 +88,8 @@ public: // Performs 'docker ps (-a)'. process::Future<std::list<Container> > ps( - const bool all = false) const; + const bool all = false, + const Option<std::string>& prefix = None()) const; process::Future<std::string> info() const; @@ -97,7 +99,8 @@ private: const process::Subprocess& s); static process::Future<std::list<Container> > _ps( const Docker& docker, - const process::Subprocess& s); + const process::Subprocess& s, + const Option<std::string>& prefix); static process::Future<Option<int> > _killAndRm( const Docker& docker, const std::string& container, http://git-wip-us.apache.org/repos/asf/mesos/blob/d5f9c58d/src/slave/containerizer/docker.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp index 44d4d3d..38b2a03 100644 --- a/src/slave/containerizer/docker.cpp +++ b/src/slave/containerizer/docker.cpp @@ -411,7 +411,7 @@ Future<Nothing> DockerContainerizerProcess::recover( // Get the list of all Docker containers (running and exited) in // order to remove any orphans. - return docker.ps(true) + return docker.ps(true, DOCKER_NAME_PREFIX) .then(defer(self(), &Self::_recover, lambda::_1)); } http://git-wip-us.apache.org/repos/asf/mesos/blob/d5f9c58d/src/tests/docker_containerizer_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/docker_containerizer_tests.cpp b/src/tests/docker_containerizer_tests.cpp index 5e41529..c0b915a 100644 --- a/src/tests/docker_containerizer_tests.cpp +++ b/src/tests/docker_containerizer_tests.cpp @@ -170,7 +170,8 @@ TEST_F(DockerContainerizerTest, DOCKER_Launch) AWAIT_READY_FOR(statusRunning, Seconds(60)); EXPECT_EQ(TASK_RUNNING, statusRunning.get().state()); - Future<list<Docker::Container> > containers = docker.ps(true); + Future<list<Docker::Container> > containers = + docker.ps(true, slave::DOCKER_NAME_PREFIX); AWAIT_READY(containers);
