You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2017/12/06 20:04:58 UTC

[1/8] mesos git commit: Tracked layers in memory for provisioned containers.

Repository: mesos
Updated Branches:
  refs/heads/master c399377f0 -> 4934eb77c


Tracked layers in memory for provisioned containers.

While adding layer checkpointing in previous patch,
this case was missed, thus provisioner could incorrectly
think a container is missing layers.

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


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

Branch: refs/heads/master
Commit: 4934eb77c0fdd20ee8f19f6d77ec8c2f708768ac
Parents: a04e99e
Author: Zhitao Li <zh...@gmail.com>
Authored: Wed Dec 6 11:42:29 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/slave/containerizer/mesos/provisioner/provisioner.cpp | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/4934eb77/src/slave/containerizer/mesos/provisioner/provisioner.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.cpp b/src/slave/containerizer/mesos/provisioner/provisioner.cpp
index b90807c..a177744 100644
--- a/src/slave/containerizer/mesos/provisioner/provisioner.cpp
+++ b/src/slave/containerizer/mesos/provisioner/provisioner.cpp
@@ -554,6 +554,7 @@ Future<ProvisionInfo> ProvisionerProcess::_provision(
   }
 
   infos[containerId]->rootfses[backend].insert(rootfsId);
+  infos[containerId]->layers = imageInfo.layers;
 
   string backendDir = provisioner::paths::getBackendDir(
       rootDir,


[7/8] mesos git commit: Fixed comments for linux MACRO.

Posted by gi...@apache.org.
Fixed comments for linux MACRO.

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


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

Branch: refs/heads/master
Commit: a04e99e7d1de2dba9bbb00328359f99ee0ed244d
Parents: 6bf0540
Author: Gilbert Song <so...@gmail.com>
Authored: Wed Dec 6 11:45:21 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/tests/containerizer/provisioner_docker_tests.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/a04e99e7/src/tests/containerizer/provisioner_docker_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/provisioner_docker_tests.cpp b/src/tests/containerizer/provisioner_docker_tests.cpp
index 3779b43..ff3eefa 100644
--- a/src/tests/containerizer/provisioner_docker_tests.cpp
+++ b/src/tests/containerizer/provisioner_docker_tests.cpp
@@ -31,7 +31,7 @@
 
 #ifdef __linux__
 #include "linux/fs.hpp"
-#endif
+#endif // __linux__
 
 #include "slave/containerizer/mesos/provisioner/constants.hpp"
 #include "slave/containerizer/mesos/provisioner/paths.hpp"
@@ -1086,7 +1086,7 @@ TEST_F(ProvisionerDockerTest, ROOT_RecoverNestedOnReboot)
   EXPECT_FALSE(os::exists(containerDir));
 }
 
-#endif
+#endif // __linux__
 
 } // namespace tests {
 } // namespace internal {


[3/8] mesos git commit: Added a flag conversion protobuf message 'ImageGcConfig'.

Posted by gi...@apache.org.
Added a flag conversion protobuf message 'ImageGcConfig'.

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


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

Branch: refs/heads/master
Commit: 5c5577004de4ff5cea16e0719de0ff08798384ea
Parents: 1f164fb
Author: Gilbert Song <so...@gmail.com>
Authored: Tue Nov 21 16:28:57 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/messages/flags.proto | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/5c557700/src/messages/flags.proto
----------------------------------------------------------------------
diff --git a/src/messages/flags.proto b/src/messages/flags.proto
index 7ae9ef8..5690914 100644
--- a/src/messages/flags.proto
+++ b/src/messages/flags.proto
@@ -105,3 +105,20 @@ message ContainerDNSInfo {
 message SlaveCapabilities {
   repeated SlaveInfo.Capability capabilities = 1;
 }
+
+
+// Describe the configuration for container image garbage collection.
+message ImageGcConfig {
+  // The image disk headroom used to calculate the threshold of container
+  // image store size. Image garbage collection will be triggered automatically
+  // if the image disk usage reaches that threshold. Please note that the
+  // headroom value has to be between 0.0 and 1.0.
+  required double image_disk_headroom = 1;
+
+  // The periodic time interval to check the image store disk usage. Please
+  // note that the unit of this time interval is 'nanosecond'.
+  required DurationInfo image_disk_watch_interval = 2;
+
+  // The excluded image list that should not be garbage collected.
+  repeated Image excluded_images = 3;
+}


[6/8] mesos git commit: Supported basic auto image gc in the agent.

Posted by gi...@apache.org.
Supported basic auto image gc in the agent.

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


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

Branch: refs/heads/master
Commit: c4741b9bd4c86e63ffd98f28975fb7aa54f25861
Parents: e9125dd
Author: Gilbert Song <so...@gmail.com>
Authored: Sun Nov 26 15:12:34 2017 -0500
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/slave/slave.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/slave/slave.hpp |  8 +++++++
 2 files changed, 69 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/c4741b9b/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 4927001..dd830d9 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -620,6 +620,21 @@ void Slave::initialize()
   // a very large disk_watch_interval).
   delay(flags.disk_watch_interval, self(), &Slave::checkDiskUsage);
 
+  // Start image store disk monitoring. Please note that image layers
+  // garbage collection is only enabled if the agent flag `--image_gc_config`
+  // is set.
+  // TODO(gilbert): Consider move the image auto GC logic to containerizers
+  // respectively. For now, it is only enabled for the Mesos Containerizer.
+  if (flags.image_gc_config.isSome() &&
+      flags.image_providers.isSome() &&
+      strings::contains(flags.containerizers, "mesos")) {
+    delay(
+        Nanoseconds(
+            flags.image_gc_config->image_disk_watch_interval().nanoseconds()),
+        self(),
+        &Slave::checkImageDiskUsage);
+  }
+
   startTime = Clock::now();
 
   // Install protobuf handlers.
@@ -6194,6 +6209,52 @@ Try<Nothing> Slave::compatible(
 }
 
 
+// TODO(gilbert): Consider to read the Image GC config dynamically.
+// For now, the Image GC config can only be updated after the agent
+// restarts.
+void Slave::checkImageDiskUsage()
+{
+  // TODO(gilbert): Container image gc is supported for docker image
+  // in Mesos Containerizer for now. Add more image store gc supports
+  // if necessary.
+  Future<double>(::fs::usage(flags.docker_store_dir))
+    .onAny(defer(self(), &Slave::_checkImageDiskUsage, lambda::_1));
+}
+
+
+void Slave::_checkImageDiskUsage(const Future<double>& usage)
+{
+  CHECK(flags.image_gc_config.isSome());
+
+  if (!usage.isReady()) {
+    LOG(ERROR) << "Failed to get image store disk usage: "
+               << (usage.isFailed() ? usage.failure() : "future discarded");
+  } else {
+    LOG(INFO) << "Current docker image store disk usage: "
+              << std::setiosflags(std::ios::fixed) << std::setprecision(2)
+              << 100 * usage.get() << "%.";
+
+    if ((flags.image_gc_config->image_disk_headroom() + usage.get()) > 1.0) {
+      LOG(INFO) << "Image store disk usage exceeds the threshold '"
+                << 100 * (1.0 - flags.image_gc_config->image_disk_headroom())
+                << "%'. Container Image GC is triggered.";
+
+      vector<Image> excludedImages(
+          flags.image_gc_config->excluded_images().begin(),
+          flags.image_gc_config->excluded_images().end());
+
+      containerizer->pruneImages(excludedImages);
+    }
+  }
+
+  delay(
+      Nanoseconds(
+          flags.image_gc_config->image_disk_watch_interval().nanoseconds()),
+      self(),
+      &Slave::checkImageDiskUsage);
+}
+
+
 Future<Nothing> Slave::recover(const Try<state::State>& state)
 {
   if (state.isError()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/c4741b9b/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 06afd52..fc762fb 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -322,6 +322,10 @@ public:
   // and os calls.
   void _checkDiskUsage(const process::Future<double>& usage);
 
+  // Garbage collect image layers based on the disk usage of image
+  // store.
+  void _checkImageDiskUsage(const process::Future<double>& usage);
+
   // Invoked whenever the detector detects a change in masters.
   // Made public for testing purposes.
   void detected(const process::Future<Option<MasterInfo>>& _master);
@@ -430,6 +434,10 @@ public:
   // Checks the current disk usage and schedules for gc as necessary.
   void checkDiskUsage();
 
+  // Checks the current container image disk usage and trigger image
+  // gc if necessary.
+  void checkImageDiskUsage();
+
   // Recovers the slave, task status update manager and isolator.
   process::Future<Nothing> recover(const Try<state::State>& state);
 


[4/8] mesos git commit: Added an optional agent flag '--image_gc_config'.

Posted by gi...@apache.org.
Added an optional agent flag '--image_gc_config'.

This is an optional agent flag. If it is not set, it means
the automatic container image gc is not enabled. Users have
to trigger image gc manually via the operator API. If it is
set, the image auto gc is enabled.

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


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

Branch: refs/heads/master
Commit: e9125dd3922d7a8b185d86a404105f29c449050c
Parents: 5c55770
Author: Gilbert Song <so...@gmail.com>
Authored: Wed Nov 22 12:13:05 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 docs/configuration/agent.md | 27 +++++++++++++++++++++++++++
 src/messages/flags.hpp      | 21 +++++++++++++++++++++
 src/slave/flags.cpp         | 22 ++++++++++++++++++++++
 src/slave/flags.hpp         |  1 +
 4 files changed, 71 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/e9125dd3/docs/configuration/agent.md
----------------------------------------------------------------------
diff --git a/docs/configuration/agent.md b/docs/configuration/agent.md
index 83b0823..d629912 100644
--- a/docs/configuration/agent.md
+++ b/docs/configuration/agent.md
@@ -875,6 +875,33 @@ Strategy for provisioning container rootfs from images, e.g., <code>aufs</code>,
 </tr>
 <tr>
   <td>
+    --image_gc_config=VALUE
+  </td>
+  <td>
+JSON-formatted configuration for automatic container image garbage
+collection. This is an optional flag. If it is not set, it means
+the automatic container image gc is not enabled. Users have to
+trigger image gc manually via the operator API. If it is set, the
+auto image gc is enabled. This image gc config can be provided either
+as a path pointing to a local file, or as a JSON-formatted string.
+Please note that the image garbage collection only work with Mesos
+Containerizer for now.
+<p/>
+See the ImageGcConfig message in `flags.proto` for the expected
+format.
+<p/>
+Example:
+<pre><code>{
+  "image_disk_headroom": 0.1,
+  "image_disk_watch_interval": {
+    "nanoseconds": 3600
+  },
+  "excluded_images": []
+}</code></pre>
+  </td>
+</tr>
+<tr>
+  <td>
     --isolation=VALUE
   </td>
   <td>

http://git-wip-us.apache.org/repos/asf/mesos/blob/e9125dd3/src/messages/flags.hpp
----------------------------------------------------------------------
diff --git a/src/messages/flags.hpp b/src/messages/flags.hpp
index 00e26cd..9899987 100644
--- a/src/messages/flags.hpp
+++ b/src/messages/flags.hpp
@@ -34,6 +34,19 @@
 namespace flags {
 
 template <>
+inline Try<mesos::internal::ImageGcConfig> parse(const std::string& value)
+{
+  // Convert from string or file to JSON.
+  Try<JSON::Object> json = parse<JSON::Object>(value);
+  if (json.isError()) {
+    return Error(json.error());
+  }
+
+  return protobuf::parse<mesos::internal::ImageGcConfig>(json.get());
+}
+
+
+template <>
 inline Try<mesos::internal::Firewall> parse(const std::string& value)
 {
   // Convert from string or file to JSON.
@@ -78,6 +91,14 @@ namespace internal {
 
 inline std::ostream& operator<<(
     std::ostream& stream,
+    const ImageGcConfig& imageGcConfig)
+{
+  return stream << imageGcConfig.DebugString();
+}
+
+
+inline std::ostream& operator<<(
+    std::ostream& stream,
     const Firewall& rules)
 {
   return stream << rules.DebugString();

http://git-wip-us.apache.org/repos/asf/mesos/blob/e9125dd3/src/slave/flags.cpp
----------------------------------------------------------------------
diff --git a/src/slave/flags.cpp b/src/slave/flags.cpp
index d876474..40b3a43 100644
--- a/src/slave/flags.cpp
+++ b/src/slave/flags.cpp
@@ -154,6 +154,28 @@ mesos::internal::slave::Flags::Flags()
       "Strategy for provisioning container rootfs from images,\n"
       "e.g., `aufs`, `bind`, `copy`, `overlay`.");
 
+  add(&Flags::image_gc_config,
+      "image_gc_config",
+      "JSON-formatted configuration for automatic container image garbage\n"
+      "collection. This is an optional flag. If it is not set, it means\n"
+      "the automatic container image gc is not enabled. Users have to\n"
+      "trigger image gc manually via the operator API. If it is set, the\n"
+      "auto image gc is enabled. This image gc config can be provided either\n"
+      "as a path pointing to a local file, or as a JSON-formatted string.\n"
+      "Please note that the image garbage collection only work with Mesos\n"
+      "Containerizer for now."
+      "\n"
+      "See the ImageGcConfig message in `flags.proto` for the expected\n"
+      "format.\n"
+      "Example:\n"
+      "{\n"
+      "  \"image_disk_headroom\": 0.1,\n"
+      "  \"image_disk_watch_interval\": {\n"
+      "    \"nanoseconds\": 3600\n"
+      "  },\n"
+      "  \"excluded_images\": []\n"
+      "}");
+
   add(&Flags::appc_simple_discovery_uri_prefix,
       "appc_simple_discovery_uri_prefix",
       "URI prefix to be used for simple discovery of appc images,\n"

http://git-wip-us.apache.org/repos/asf/mesos/blob/e9125dd3/src/slave/flags.hpp
----------------------------------------------------------------------
diff --git a/src/slave/flags.hpp b/src/slave/flags.hpp
index f84ba5a..5918484 100644
--- a/src/slave/flags.hpp
+++ b/src/slave/flags.hpp
@@ -51,6 +51,7 @@ public:
 
   Option<std::string> image_providers;
   Option<std::string> image_provisioner_backend;
+  Option<ImageGcConfig> image_gc_config;
 
   std::string appc_simple_discovery_uri_prefix;
   std::string appc_store_dir;


[5/8] mesos git commit: Added excluded image parameter to containerizer pruneImages().

Posted by gi...@apache.org.
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 <so...@gmail.com>
Authored: Sun Nov 26 15:46:01 2017 -0500
Committer: Gilbert Song <so...@gmail.com>
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 {


[2/8] mesos git commit: Fixed a typo in gc_test.cpp.

Posted by gi...@apache.org.
Fixed a typo in gc_test.cpp.

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


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

Branch: refs/heads/master
Commit: 6bf05406d1e7f42b0a61b2309f9829298e54bd9a
Parents: 849dec1
Author: Gilbert Song <so...@gmail.com>
Authored: Tue Nov 28 18:44:59 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/tests/gc_tests.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/6bf05406/src/tests/gc_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/gc_tests.cpp b/src/tests/gc_tests.cpp
index 673fdd8..0e34c01 100644
--- a/src/tests/gc_tests.cpp
+++ b/src/tests/gc_tests.cpp
@@ -596,7 +596,7 @@ TEST_F(GarbageCollectorIntegrationTest, ExitedExecutor)
 
   Clock::pause();
 
-  // Kiling the executor will cause the slave to schedule its
+  // Killing the executor will cause the slave to schedule its
   // directory to get garbage collected.
   EXPECT_CALL(exec, shutdown(_))
     .Times(AtMost(1));
@@ -708,7 +708,7 @@ TEST_F(GarbageCollectorIntegrationTest, DiskUsage)
 
   Clock::pause();
 
-  // Kiling the executor will cause the slave to schedule its
+  // Killing the executor will cause the slave to schedule its
   // directory to get garbage collected.
   EXPECT_CALL(exec, shutdown(_))
     .Times(AtMost(1));


[8/8] mesos git commit: Deleted a redundant line in test/containerizer.hpp.

Posted by gi...@apache.org.
Deleted a redundant line in test/containerizer.hpp.

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


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

Branch: refs/heads/master
Commit: 849dec1edb1e1092c7ec4d6f03094abfcc082c51
Parents: c4741b9
Author: Gilbert Song <so...@gmail.com>
Authored: Mon Nov 27 10:55:33 2017 -0800
Committer: Gilbert Song <so...@gmail.com>
Committed: Wed Dec 6 12:04:19 2017 -0800

----------------------------------------------------------------------
 src/tests/containerizer.hpp | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/849dec1e/src/tests/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer.hpp b/src/tests/containerizer.hpp
index 179f854..d6a69d6 100644
--- a/src/tests/containerizer.hpp
+++ b/src/tests/containerizer.hpp
@@ -167,7 +167,6 @@ private:
   process::Future<bool> _destroy(
       const ContainerID& containerId);
 
-
   process::Future<bool> _kill(
       const ContainerID& containerId,
       int status);