You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ya...@apache.org on 2016/07/06 21:54:07 UTC
[2/5] mesos git commit: Improved Mesos containerizer logging and
documentation.
Improved Mesos containerizer logging and documentation.
Review: https://reviews.apache.org/r/49651
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/48b1bfa6
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/48b1bfa6
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/48b1bfa6
Branch: refs/heads/master
Commit: 48b1bfa6ec5f88ceea327ae3c5345fd4d11442c7
Parents: dc18dd7
Author: Jiang Yan Xu <xu...@apple.com>
Authored: Fri Jul 1 15:25:54 2016 -0700
Committer: Jiang Yan Xu <xu...@apple.com>
Committed: Wed Jul 6 14:53:46 2016 -0700
----------------------------------------------------------------------
src/slave/containerizer/mesos/containerizer.cpp | 21 +++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/48b1bfa6/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index e946a28..0b2abba 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -1414,7 +1414,10 @@ Future<containerizer::Termination> MesosContainerizerProcess::wait(
const ContainerID& containerId)
{
if (!containers_.contains(containerId)) {
- return Failure("Unknown container: " + stringify(containerId));
+ // See the comments in destroy() for race conditions which lead
+ // to "unknown containers".
+ return Failure("Unknown container (could have already been destroyed): " +
+ stringify(containerId));
}
return containers_[containerId]->promise.future();
@@ -1578,14 +1581,26 @@ void MesosContainerizerProcess::destroy(
const ContainerID& containerId)
{
if (!containers_.contains(containerId)) {
- LOG(WARNING) << "Ignoring destroy of unknown container: " << containerId;
+ // This can happen due to the race between destroys initiated by
+ // the launch failure, the terminated executor and the agent so
+ // the same container is destroyed multiple times in reaction to
+ // one failure. e.g., a stuck fetcher results in:
+ // - The agent invoking destroy(), which kills the fetcher and
+ // the executor.
+ // - The agent invoking destroy() again for the failed launch
+ // (due to the fetcher getting killed).
+ // - The containerizer invoking destroy() for the reaped executor.
+ //
+ // The guard here and `if (container->state == DESTROYING)` below
+ // make sure redundant destroys short-circuit.
+ VLOG(1) << "Ignoring destroy of unknown container: " << containerId;
return;
}
Container* container = containers_[containerId].get();
if (container->state == DESTROYING) {
- // Destroy has already been initiated.
+ VLOG(1) << "Destroy has already been initiated for '" << containerId << "'";
return;
}