Repository: mesos Updated Branches: refs/heads/master 0da49ee9b -> 77aba9a27
Made CNI isolator recovery waits until unknown orphan cleanup is done. Review: https://reviews.apache.org/r/67769 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/77aba9a2 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/77aba9a2 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/77aba9a2 Branch: refs/heads/master Commit: 77aba9a27ab8aac30f54cea6e465269e9c083fb2 Parents: 0da49ee Author: Qian Zhang <zhq527...@gmail.com> Authored: Thu Jun 28 16:11:31 2018 +0800 Committer: Qian Zhang <zhq527...@gmail.com> Committed: Mon Jul 2 07:56:19 2018 +0800 ---------------------------------------------------------------------- .../mesos/isolators/network/cni/cni.cpp | 24 ++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/77aba9a2/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp index dfa26c6..f46c962 100644 --- a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp +++ b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp @@ -403,6 +403,9 @@ Future<Nothing> NetworkCniIsolatorProcess::recover( rootDir.get() + "': " + entries.error()); } + vector<ContainerID> unknownOrphans; + vector<Future<Nothing>> cleanups; + foreach (const string& entry, entries.get()) { ContainerID containerId = protobuf::parseContainerId(Path(entry).basename()); @@ -432,12 +435,29 @@ Future<Nothing> NetworkCniIsolatorProcess::recover( if (!orphans.contains(containerId)) { LOG(INFO) << "Removing unknown orphaned container " << containerId; - cleanup(containerId); + unknownOrphans.push_back(containerId); + cleanups.push_back(cleanup(containerId)); } } } - return Nothing(); + return await(cleanups) + .then([unknownOrphans](const vector<Future<Nothing>>& cleanups) { + CHECK_EQ(cleanups.size(), unknownOrphans.size()); + + int i = 0; + foreach (const Future<Nothing>& cleanup, cleanups) { + if (!cleanup.isReady()) { + LOG(ERROR) << "Failed to cleanup unknown orphaned container " + << unknownOrphans.at(i) << ": " + << (cleanup.isFailed() ? cleanup.failure() : "discarded"); + } + + i++; + } + + return Nothing(); + }); }