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 2014/11/01 01:06:05 UTC

git commit: Avoid docker inspect on each usage call

Repository: mesos
Updated Branches:
  refs/heads/master 3633142e4 -> 6fdd2d40e


Avoid docker inspect on each usage call

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


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

Branch: refs/heads/master
Commit: 6fdd2d40e588a0d45c388a29bdf8a1d976b3af7c
Parents: 3633142
Author: Timothy Chen <tn...@apache.org>
Authored: Fri Oct 17 16:05:12 2014 -0700
Committer: Timothy Chen <tn...@apache.org>
Committed: Fri Oct 31 17:07:20 2014 -0700

----------------------------------------------------------------------
 src/slave/containerizer/docker.cpp | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/6fdd2d40/src/slave/containerizer/docker.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/docker.cpp b/src/slave/containerizer/docker.cpp
index 33ec6de..a668920 100644
--- a/src/slave/containerizer/docker.cpp
+++ b/src/slave/containerizer/docker.cpp
@@ -199,8 +199,12 @@ private:
       pid_t pid);
 
   Future<ResourceStatistics> _usage(
-    const ContainerID& containerId,
-    const Docker::Container& container);
+      const ContainerID& containerId,
+      const Docker::Container& container);
+
+  Future<ResourceStatistics> __usage(
+      const ContainerID& containerId,
+      pid_t pid);
 
   // Call back for when the executor exits. This will trigger
   // container destroy.
@@ -1380,6 +1384,11 @@ Future<ResourceStatistics> DockerContainerizerProcess::usage(
     return Failure("Container is being removed: " + stringify(containerId));
   }
 
+  // Skip inspecting the docker container if we already have the pid.
+  if (container->pid.isSome()) {
+    return __usage(containerId, container->pid.get());
+  }
+
   return docker->inspect(container->name())
     .then(defer(self(), &Self::_usage, containerId, lambda::_1));
 #endif // __linux__
@@ -1405,11 +1414,22 @@ Future<ResourceStatistics> DockerContainerizerProcess::_usage(
     return Failure("Container is not running");
   }
 
+  container->pid = pid;
+
+  return __usage(containerId, pid.get());
+}
+
+
+Future<ResourceStatistics> DockerContainerizerProcess::__usage(
+    const ContainerID& containerId,
+    pid_t pid)
+{
+  Container* container = containers_[containerId];
+
   // Note that here getting the root pid is enough because
   // the root process acts as an 'init' process in the docker
   // container, so no other child processes will escape it.
-  Try<ResourceStatistics> statistics =
-    mesos::internal::usage(pid.get(), true, true);
+  Try<ResourceStatistics> statistics = mesos::internal::usage(pid, true, true);
   if (statistics.isError()) {
     return Failure(statistics.error());
   }