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();
+    });
 }
 
 

Reply via email to