Added excluded image parameter to containerizer pruneImages(). Review: https://reviews.apache.org/r/64264
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1f164fb6 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1f164fb6 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1f164fb6 Branch: refs/heads/master Commit: 1f164fb6b3da49ffc5e1b97e026969f3d5703470 Parents: c399377 Author: Gilbert Song <[email protected]> Authored: Sun Nov 26 15:46:01 2017 -0500 Committer: Gilbert Song <[email protected]> Committed: Wed Dec 6 12:04:19 2017 -0800 ---------------------------------------------------------------------- src/slave/containerizer/composing.cpp | 13 ++++++----- src/slave/containerizer/composing.hpp | 3 ++- src/slave/containerizer/containerizer.hpp | 3 ++- src/slave/containerizer/docker.cpp | 3 ++- src/slave/containerizer/docker.hpp | 3 ++- src/slave/containerizer/mesos/containerizer.cpp | 23 +++++++++++++------- src/slave/containerizer/mesos/containerizer.hpp | 6 +++-- src/tests/containerizer.cpp | 10 +++++---- src/tests/containerizer.hpp | 7 +++--- src/tests/containerizer/mock_containerizer.hpp | 5 ++++- 10 files changed, 49 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/composing.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/composing.cpp b/src/slave/containerizer/composing.cpp index 8388096..9ace70d 100644 --- a/src/slave/containerizer/composing.cpp +++ b/src/slave/containerizer/composing.cpp @@ -95,7 +95,7 @@ public: Future<Nothing> remove(const ContainerID& containerId); - Future<Nothing> pruneImages(); + Future<Nothing> pruneImages(const vector<Image>& excludedImages); private: // Continuations. @@ -265,9 +265,11 @@ Future<Nothing> ComposingContainerizer::remove(const ContainerID& containerId) } -Future<Nothing> ComposingContainerizer::pruneImages() +Future<Nothing> ComposingContainerizer::pruneImages( + const vector<Image>& excludedImages) { - return dispatch(process, &ComposingContainerizerProcess::pruneImages); + return dispatch( + process, &ComposingContainerizerProcess::pruneImages, excludedImages); } @@ -697,12 +699,13 @@ Future<Nothing> ComposingContainerizerProcess::remove( } -Future<Nothing> ComposingContainerizerProcess::pruneImages() +Future<Nothing> ComposingContainerizerProcess::pruneImages( + const vector<Image>& excludedImages) { list<Future<Nothing>> futures; foreach (Containerizer* containerizer, containerizers_) { - futures.push_back(containerizer->pruneImages()); + futures.push_back(containerizer->pruneImages(excludedImages)); } return collect(futures) http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/composing.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/composing.hpp b/src/slave/containerizer/composing.hpp index 3d00609..1221d9b 100644 --- a/src/slave/containerizer/composing.hpp +++ b/src/slave/containerizer/composing.hpp @@ -86,7 +86,8 @@ public: virtual process::Future<Nothing> remove(const ContainerID& containerId); - virtual process::Future<Nothing> pruneImages(); + virtual process::Future<Nothing> pruneImages( + const std::vector<Image>& excludedImages); private: ComposingContainerizerProcess* process; http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/containerizer.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/containerizer.hpp b/src/slave/containerizer/containerizer.hpp index 7a0c6fc..836283a 100644 --- a/src/slave/containerizer/containerizer.hpp +++ b/src/slave/containerizer/containerizer.hpp @@ -167,7 +167,8 @@ public: } // Prune unused images from supported image stores. - virtual process::Future<Nothing> pruneImages() = 0; + virtual process::Future<Nothing> pruneImages( + const std::vector<Image>& excludedImages) = 0; }; } // namespace slave { http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/docker.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp index d837442..229891d 100644 --- a/src/slave/containerizer/docker.cpp +++ b/src/slave/containerizer/docker.cpp @@ -876,7 +876,8 @@ Future<hashset<ContainerID>> DockerContainerizer::containers() } -Future<Nothing> DockerContainerizer::pruneImages() +Future<Nothing> DockerContainerizer::pruneImages( + const vector<Image>& excludedImages) { VLOG(1) << "DockerContainerizer does not support pruneImages"; return Nothing(); http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/docker.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/docker.hpp b/src/slave/containerizer/docker.hpp index 9df9849..f1b56c8 100644 --- a/src/slave/containerizer/docker.hpp +++ b/src/slave/containerizer/docker.hpp @@ -109,7 +109,8 @@ public: virtual process::Future<hashset<ContainerID>> containers(); - virtual process::Future<Nothing> pruneImages(); + virtual process::Future<Nothing> pruneImages( + const std::vector<Image>& excludedImages); private: process::Owned<DockerContainerizerProcess> process; http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/mesos/containerizer.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp index 44e8f7a..a673117 100644 --- a/src/slave/containerizer/mesos/containerizer.cpp +++ b/src/slave/containerizer/mesos/containerizer.cpp @@ -660,9 +660,11 @@ Future<Nothing> MesosContainerizer::remove(const ContainerID& containerId) } -Future<Nothing> MesosContainerizer::pruneImages() +Future<Nothing> MesosContainerizer::pruneImages( + const vector<Image>& excludedImages) { - return dispatch(process.get(), &MesosContainerizerProcess::pruneImages); + return dispatch( + process.get(), &MesosContainerizerProcess::pruneImages, excludedImages); } @@ -2828,10 +2830,11 @@ Future<hashset<ContainerID>> MesosContainerizerProcess::containers() } -Future<Nothing> MesosContainerizerProcess::pruneImages() +Future<Nothing> MesosContainerizerProcess::pruneImages( + const vector<Image>& excludedImages) { - vector<Image> excludedImages; - excludedImages.reserve(containers_.size()); + vector<Image> _excludedImages; + _excludedImages.reserve(containers_.size() + excludedImages.size()); foreachpair ( const ContainerID& containerId, @@ -2850,14 +2853,18 @@ Future<Nothing> MesosContainerizerProcess::pruneImages() const ContainerConfig& containerConfig = container->config.get(); if (containerConfig.has_container_info() && containerConfig.container_info().mesos().has_image()) { - excludedImages.push_back( + _excludedImages.push_back( containerConfig.container_info().mesos().image()); } } - // TODO(zhitao): use std::unique to deduplicate `excludedImages`. + foreach (const Image& image, excludedImages) { + _excludedImages.push_back(image); + } + + // TODO(zhitao): use std::unique to deduplicate `_excludedImages`. - return provisioner->pruneImages(excludedImages); + return provisioner->pruneImages(_excludedImages); } http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/slave/containerizer/mesos/containerizer.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp index e2739e0..965e183 100644 --- a/src/slave/containerizer/mesos/containerizer.hpp +++ b/src/slave/containerizer/mesos/containerizer.hpp @@ -111,7 +111,8 @@ public: virtual process::Future<Nothing> remove(const ContainerID& containerId); - virtual process::Future<Nothing> pruneImages(); + virtual process::Future<Nothing> pruneImages( + const std::vector<Image>& excludedImages); private: explicit MesosContainerizer( @@ -183,7 +184,8 @@ public: virtual process::Future<hashset<ContainerID>> containers(); - virtual process::Future<Nothing> pruneImages(); + virtual process::Future<Nothing> pruneImages( + const std::vector<Image>& excludedImages); private: enum State http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/tests/containerizer.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer.cpp b/src/tests/containerizer.cpp index 665bd5d..13a290f 100644 --- a/src/tests/containerizer.cpp +++ b/src/tests/containerizer.cpp @@ -314,7 +314,7 @@ public: return containers_.keys(); } - Future<Nothing> pruneImages() + Future<Nothing> pruneImages(const vector<Image>& excludedImages) { return Nothing(); } @@ -444,7 +444,7 @@ void TestContainerizer::setup() EXPECT_CALL(*this, kill(_, _)) .WillRepeatedly(Invoke(this, &TestContainerizer::_kill)); - EXPECT_CALL(*this, pruneImages()) + EXPECT_CALL(*this, pruneImages(_)) .WillRepeatedly(Invoke(this, &TestContainerizer::_pruneImages)); } @@ -578,11 +578,13 @@ Future<hashset<ContainerID>> TestContainerizer::containers() } -Future<Nothing> TestContainerizer::_pruneImages() +Future<Nothing> TestContainerizer::_pruneImages( + const vector<Image>& excludedImages) { return process::dispatch( process.get(), - &TestContainerizerProcess::pruneImages); + &TestContainerizerProcess::pruneImages, + excludedImages); } } // namespace tests { http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/tests/containerizer.hpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer.hpp b/src/tests/containerizer.hpp index 3d162fe..179f854 100644 --- a/src/tests/containerizer.hpp +++ b/src/tests/containerizer.hpp @@ -122,9 +122,9 @@ public: kill, process::Future<bool>(const ContainerID&, int)); - MOCK_METHOD0( + MOCK_METHOD1( pruneImages, - process::Future<Nothing>()); + process::Future<Nothing>(const std::vector<Image>&)); // Additional destroy method for testing because we won't know the // ContainerID created for each container. @@ -172,7 +172,8 @@ private: const ContainerID& containerId, int status); - process::Future<Nothing> _pruneImages(); + process::Future<Nothing> _pruneImages( + const std::vector<Image>& excludedImages); process::Owned<TestContainerizerProcess> process; }; http://git-wip-us.apache.org/repos/asf/mesos/blob/1f164fb6/src/tests/containerizer/mock_containerizer.hpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/mock_containerizer.hpp b/src/tests/containerizer/mock_containerizer.hpp index bbfa768..01c617a 100644 --- a/src/tests/containerizer/mock_containerizer.hpp +++ b/src/tests/containerizer/mock_containerizer.hpp @@ -82,7 +82,10 @@ public: containers, process::Future<hashset<ContainerID>>()); - MOCK_METHOD0(pruneImages, process::Future<Nothing>()); + MOCK_METHOD1( + pruneImages, + process::Future<Nothing>( + const std::vector<Image>&)); }; } // namespace tests {
