You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ti...@apache.org on 2014/05/23 03:56:22 UTC

git commit: Fixed concurrent destroy invocations on the ExternalContainerizer.

Repository: mesos
Updated Branches:
  refs/heads/master 1e8e63f33 -> 0aa8ddd0c


Fixed concurrent destroy invocations on the ExternalContainerizer.

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


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

Branch: refs/heads/master
Commit: 0aa8ddd0c8acb893d29073109c2ca4c61a8a1d23
Parents: 1e8e63f
Author: Till Toenshoff <to...@me.com>
Authored: Fri May 23 03:54:55 2014 +0200
Committer: Till Toenshoff <to...@me.com>
Committed: Fri May 23 03:54:55 2014 +0200

----------------------------------------------------------------------
 src/slave/containerizer/external_containerizer.cpp | 7 +++++++
 src/slave/containerizer/external_containerizer.hpp | 6 +++++-
 2 files changed, 12 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0aa8ddd0/src/slave/containerizer/external_containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/external_containerizer.cpp b/src/slave/containerizer/external_containerizer.cpp
index d684fac..a56653d 100644
--- a/src/slave/containerizer/external_containerizer.cpp
+++ b/src/slave/containerizer/external_containerizer.cpp
@@ -786,6 +786,13 @@ void ExternalContainerizerProcess::_destroy(const ContainerID& containerId)
     return;
   }
 
+  if (actives[containerId]->destroying) {
+    LOG(WARNING) << "Container '" << containerId
+                 << "' is already being destroyed";
+    return;
+  }
+  actives[containerId]->destroying = true;
+
   containerizer::Destroy destroy;
   destroy.mutable_container_id()->CopyFrom(containerId);
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/0aa8ddd0/src/slave/containerizer/external_containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/external_containerizer.hpp b/src/slave/containerizer/external_containerizer.hpp
index afffff1..7e5474c 100644
--- a/src/slave/containerizer/external_containerizer.hpp
+++ b/src/slave/containerizer/external_containerizer.hpp
@@ -176,7 +176,8 @@ private:
   // Information describing a running container.
   struct Container
   {
-    Container(const Sandbox& sandbox) : sandbox(sandbox), pid(None()) {}
+    Container(const Sandbox& sandbox)
+      : sandbox(sandbox), pid(None()), destroying(false) {}
 
     // Keep sandbox information available for subsequent containerizer
     // invocations.
@@ -189,6 +190,9 @@ private:
 
     process::Promise<containerizer::Termination> termination;
 
+    // Is set when container is being destroyed.
+    bool destroying;
+
     // As described in MESOS-1251, we need to make sure that events
     // that are triggered before launch has completed, are in fact
     // queued until then to reduce complexity within external