Repository: mesos Updated Branches: refs/heads/master ae24a4bfc -> 9dfc36b49
Handled discarded case in launch nested container handler. Previously, only the failure case is handled. This patch fix the issue by handling discarded case as well. Review: https://reviews.apache.org/r/62742 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9dfc36b4 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9dfc36b4 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9dfc36b4 Branch: refs/heads/master Commit: 9dfc36b49f9564f4284a0bf5e4fc0d53847011a3 Parents: ae24a4b Author: Jie Yu <[email protected]> Authored: Mon Oct 2 20:58:28 2017 -0700 Committer: Jie Yu <[email protected]> Committed: Tue Oct 3 16:34:55 2017 -0700 ---------------------------------------------------------------------- src/slave/http.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/9dfc36b4/src/slave/http.cpp ---------------------------------------------------------------------- diff --git a/src/slave/http.cpp b/src/slave/http.cpp index 3ea7829..f4c3e6b 100644 --- a/src/slave/http.cpp +++ b/src/slave/http.cpp @@ -2405,17 +2405,33 @@ Future<Response> Http::_launchNestedContainer( map<string, string>(), None()); + // TODO(jieyu): If the http connection breaks, the handler will + // trigger a discard on the returned future. That'll result in the + // future 'launched' transitioning into DISCARDED state. However, + // this does not mean the launch was discarded correctly and it + // requires a destroy. See MESOS-8039 for more details. + // // TODO(bmahler): The containerizers currently require that // the caller calls destroy if the launch fails. See MESOS-6214. launched - .onFailed(defer(slave->self(), [=](const string& failure) { - LOG(WARNING) << "Failed to launch nested container " << containerId - << ": " << failure; + .onAny(defer(slave->self(), [=](const Future<bool>& launch) { + if (launch.isReady()) { + return; + } + + LOG(WARNING) << "Failed to launch nested container " + << containerId << ": " + << (launch.isFailed() ? launch.failure() : "discarded"); slave->containerizer->destroy(containerId) - .onFailed([=](const string& failure) { - LOG(ERROR) << "Failed to destroy nested container " << containerId - << " after launch failure: " << failure; + .onAny([=](const Future<bool>& destroy) { + if (destroy.isReady()) { + return; + } + + LOG(ERROR) << "Failed to destroy nested container " + << containerId << " after launch failure: " + << (destroy.isFailed() ? destroy.failure() : "discarded"); }); }));
