You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2015/04/25 01:37:00 UTC

[2/4] mesos git commit: Changed the isolator recover interface to take a set of orphan containers detected by the launcher.

Changed the isolator recover interface to take a set of orphan
containers detected by the launcher.

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


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

Branch: refs/heads/master
Commit: bd0863e8482f38f905aebffb7d710b58c9f44f20
Parents: 24c78a1
Author: Jie Yu <yu...@gmail.com>
Authored: Mon Apr 20 12:56:07 2015 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Apr 24 16:36:30 2015 -0700

----------------------------------------------------------------------
 include/mesos/slave/isolator.hpp                | 34 ++++++++++++--------
 src/slave/containerizer/isolator.cpp            | 10 ++++--
 .../isolators/cgroups/cpushare.cpp              |  3 +-
 .../isolators/cgroups/cpushare.hpp              |  3 +-
 .../containerizer/isolators/cgroups/mem.cpp     |  3 +-
 .../containerizer/isolators/cgroups/mem.hpp     |  3 +-
 .../isolators/cgroups/perf_event.cpp            |  3 +-
 .../isolators/cgroups/perf_event.hpp            |  3 +-
 .../isolators/filesystem/shared.cpp             |  3 +-
 .../isolators/filesystem/shared.hpp             |  3 +-
 .../containerizer/isolators/namespaces/pid.cpp  |  3 +-
 .../containerizer/isolators/namespaces/pid.hpp  |  3 +-
 .../isolators/network/port_mapping.cpp          |  3 +-
 .../isolators/network/port_mapping.hpp          |  3 +-
 src/slave/containerizer/isolators/posix.hpp     |  3 +-
 .../containerizer/isolators/posix/disk.cpp      |  3 +-
 .../containerizer/isolators/posix/disk.hpp      |  3 +-
 src/slave/containerizer/mesos/containerizer.cpp |  7 ++--
 src/slave/containerizer/mesos/containerizer.hpp |  3 +-
 src/tests/containerizer_tests.cpp               | 23 +++++++------
 src/tests/isolator.hpp                          |  5 +--
 21 files changed, 80 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/include/mesos/slave/isolator.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/slave/isolator.hpp b/include/mesos/slave/isolator.hpp
index 7cbce42..b4fe1ff 100644
--- a/include/mesos/slave/isolator.hpp
+++ b/include/mesos/slave/isolator.hpp
@@ -29,6 +29,7 @@
 #include <process/owned.hpp>
 #include <process/process.hpp>
 
+#include <stout/hashset.hpp>
 #include <stout/try.hpp>
 
 namespace mesos {
@@ -80,15 +81,19 @@ public:
   explicit Isolator(process::Owned<IsolatorProcess> process);
   ~Isolator();
 
-  // Recover containers from the run states.
+  // Recover containers from the run states and the orphan containers
+  // (known to the launcher but not known to the slave) detected by
+  // the launcher.
   process::Future<Nothing> recover(
-      const std::list<ExecutorRunState>& states);
-
-  // Prepare for isolation of the executor. Any steps that require execution in
-  // the containerized context (e.g. inside a network namespace) can be
-  // returned in the optional CommandInfo and they will be run by the Launcher.
-  // TODO(idownes): Any URIs or Environment in the CommandInfo will be ignored;
-  // only the command value is used.
+      const std::list<ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
+
+  // Prepare for isolation of the executor. Any steps that require
+  // execution in the containerized context (e.g. inside a network
+  // namespace) can be returned in the optional CommandInfo and they
+  // will be run by the Launcher.
+  // TODO(idownes): Any URIs or Environment in the CommandInfo will be
+  // ignored; only the command value is used.
   process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,
       const ExecutorInfo& executorInfo,
@@ -100,8 +105,9 @@ public:
       const ContainerID& containerId,
       pid_t pid);
 
-  // Watch the containerized executor and report if any resource constraint
-  // impacts the container, e.g., the kernel killing some processes.
+  // Watch the containerized executor and report if any resource
+  // constraint impacts the container, e.g., the kernel killing some
+  // processes.
   process::Future<Limitation> watch(const ContainerID& containerId);
 
   // Update the resources allocated to the container.
@@ -113,8 +119,8 @@ public:
   process::Future<ResourceStatistics> usage(
       const ContainerID& containerId) const;
 
-  // Clean up a terminated container. This is called after the executor and all
-  // processes in the container have terminated.
+  // Clean up a terminated container. This is called after the
+  // executor and all processes in the container have terminated.
   process::Future<Nothing> cleanup(const ContainerID& containerId);
 
 private:
@@ -131,7 +137,8 @@ public:
   virtual ~IsolatorProcess() {}
 
   virtual process::Future<Nothing> recover(
-      const std::list<ExecutorRunState>& state) = 0;
+      const std::list<ExecutorRunState>& state,
+      const hashset<ContainerID>& orphans) = 0;
 
   virtual process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,
@@ -156,7 +163,6 @@ public:
   virtual process::Future<Nothing> cleanup(const ContainerID& containerId) = 0;
 };
 
-
 } // namespace slave {
 } // namespace mesos {
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolator.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolator.cpp b/src/slave/containerizer/isolator.cpp
index a6ad1d5..d99f47e 100644
--- a/src/slave/containerizer/isolator.cpp
+++ b/src/slave/containerizer/isolator.cpp
@@ -28,7 +28,6 @@ using std::list;
 namespace mesos {
 namespace slave {
 
-
 Isolator::Isolator(Owned<IsolatorProcess> _process)
   : process(_process)
 {
@@ -43,9 +42,14 @@ Isolator::~Isolator()
 }
 
 
-Future<Nothing> Isolator::recover(const list<ExecutorRunState>& state)
+Future<Nothing> Isolator::recover(
+    const list<ExecutorRunState>& state,
+    const hashset<ContainerID>& orphans)
 {
-  return dispatch(process.get(), &IsolatorProcess::recover, state);
+  return dispatch(process.get(),
+                  &IsolatorProcess::recover,
+                  state,
+                  orphans);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/cpushare.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.cpp b/src/slave/containerizer/isolators/cgroups/cpushare.cpp
index 41b2597..9aed02c 100644
--- a/src/slave/containerizer/isolators/cgroups/cpushare.cpp
+++ b/src/slave/containerizer/isolators/cgroups/cpushare.cpp
@@ -173,7 +173,8 @@ Try<Isolator*> CgroupsCpushareIsolatorProcess::create(const Flags& flags)
 
 
 Future<Nothing> CgroupsCpushareIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& _orphans)
 {
   hashset<string> cgroups;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/cpushare.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/cpushare.hpp b/src/slave/containerizer/isolators/cgroups/cpushare.hpp
index f72ebb1..ff4a9db 100644
--- a/src/slave/containerizer/isolators/cgroups/cpushare.hpp
+++ b/src/slave/containerizer/isolators/cgroups/cpushare.hpp
@@ -45,7 +45,8 @@ public:
   virtual ~CgroupsCpushareIsolatorProcess();
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/mem.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/mem.cpp b/src/slave/containerizer/isolators/cgroups/mem.cpp
index a7a83ef..69fecae 100644
--- a/src/slave/containerizer/isolators/cgroups/mem.cpp
+++ b/src/slave/containerizer/isolators/cgroups/mem.cpp
@@ -163,7 +163,8 @@ Try<Isolator*> CgroupsMemIsolatorProcess::create(const Flags& flags)
 
 
 Future<Nothing> CgroupsMemIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& _orphans)
 {
   hashset<string> cgroups;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/mem.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/mem.hpp b/src/slave/containerizer/isolators/cgroups/mem.hpp
index d510bc0..c8e1ba1 100644
--- a/src/slave/containerizer/isolators/cgroups/mem.hpp
+++ b/src/slave/containerizer/isolators/cgroups/mem.hpp
@@ -45,7 +45,8 @@ public:
   virtual ~CgroupsMemIsolatorProcess();
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/perf_event.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.cpp b/src/slave/containerizer/isolators/cgroups/perf_event.cpp
index 4dfccc5..3085932 100644
--- a/src/slave/containerizer/isolators/cgroups/perf_event.cpp
+++ b/src/slave/containerizer/isolators/cgroups/perf_event.cpp
@@ -143,7 +143,8 @@ void CgroupsPerfEventIsolatorProcess::initialize()
 
 
 Future<Nothing> CgroupsPerfEventIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& _orphans)
 {
   hashset<string> cgroups;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/cgroups/perf_event.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/cgroups/perf_event.hpp b/src/slave/containerizer/isolators/cgroups/perf_event.hpp
index 9f35ed0..6679719 100644
--- a/src/slave/containerizer/isolators/cgroups/perf_event.hpp
+++ b/src/slave/containerizer/isolators/cgroups/perf_event.hpp
@@ -43,7 +43,8 @@ public:
   virtual ~CgroupsPerfEventIsolatorProcess();
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/filesystem/shared.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/filesystem/shared.cpp b/src/slave/containerizer/isolators/filesystem/shared.cpp
index d5abea2..101d6da 100644
--- a/src/slave/containerizer/isolators/filesystem/shared.cpp
+++ b/src/slave/containerizer/isolators/filesystem/shared.cpp
@@ -63,7 +63,8 @@ Try<Isolator*> SharedFilesystemIsolatorProcess::create(const Flags& flags)
 
 
 Future<Nothing> SharedFilesystemIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& orphans)
 {
   // There is nothing to recover because we do not keep any state and
   // do not monitor filesystem usage or perform any action on cleanup.

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/filesystem/shared.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/filesystem/shared.hpp b/src/slave/containerizer/isolators/filesystem/shared.hpp
index 764a45c..68ed54d 100644
--- a/src/slave/containerizer/isolators/filesystem/shared.hpp
+++ b/src/slave/containerizer/isolators/filesystem/shared.hpp
@@ -40,7 +40,8 @@ public:
   virtual ~SharedFilesystemIsolatorProcess();
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/namespaces/pid.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/namespaces/pid.cpp b/src/slave/containerizer/isolators/namespaces/pid.cpp
index eb35ae6..475cdde 100644
--- a/src/slave/containerizer/isolators/namespaces/pid.cpp
+++ b/src/slave/containerizer/isolators/namespaces/pid.cpp
@@ -124,7 +124,8 @@ Result<ino_t> NamespacesPidIsolatorProcess::getNamespace(
 
 
 Future<Nothing> NamespacesPidIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& orphans)
 {
   hashset<ContainerID> containers;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/namespaces/pid.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/namespaces/pid.hpp b/src/slave/containerizer/isolators/namespaces/pid.hpp
index 6a7be80..187cbe8 100644
--- a/src/slave/containerizer/isolators/namespaces/pid.hpp
+++ b/src/slave/containerizer/isolators/namespaces/pid.hpp
@@ -57,7 +57,8 @@ public:
   virtual ~NamespacesPidIsolatorProcess() {}
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/network/port_mapping.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/network/port_mapping.cpp b/src/slave/containerizer/isolators/network/port_mapping.cpp
index ccdc44f..0053336 100644
--- a/src/slave/containerizer/isolators/network/port_mapping.cpp
+++ b/src/slave/containerizer/isolators/network/port_mapping.cpp
@@ -1430,7 +1430,8 @@ Try<Isolator*> PortMappingIsolatorProcess::create(const Flags& flags)
 
 
 Future<Nothing> PortMappingIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& orphans)
 {
   // Extract pids from virtual device names (veth). This tells us
   // about all the potential live containers on this slave.

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/network/port_mapping.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/network/port_mapping.hpp b/src/slave/containerizer/isolators/network/port_mapping.hpp
index 466cd82..c72fb47 100644
--- a/src/slave/containerizer/isolators/network/port_mapping.hpp
+++ b/src/slave/containerizer/isolators/network/port_mapping.hpp
@@ -147,7 +147,8 @@ public:
   virtual ~PortMappingIsolatorProcess() {}
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/posix.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/posix.hpp b/src/slave/containerizer/isolators/posix.hpp
index fc31cec..9b43f02 100644
--- a/src/slave/containerizer/isolators/posix.hpp
+++ b/src/slave/containerizer/isolators/posix.hpp
@@ -42,7 +42,8 @@ class PosixIsolatorProcess : public mesos::slave::IsolatorProcess
 {
 public:
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& state)
+      const std::list<mesos::slave::ExecutorRunState>& state,
+      const hashset<ContainerID>& orphans)
   {
     foreach (const mesos::slave::ExecutorRunState& run, state) {
       // This should (almost) never occur: see comment in

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/posix/disk.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/posix/disk.cpp b/src/slave/containerizer/isolators/posix/disk.cpp
index d2ea3b1..73059bd 100644
--- a/src/slave/containerizer/isolators/posix/disk.cpp
+++ b/src/slave/containerizer/isolators/posix/disk.cpp
@@ -85,7 +85,8 @@ PosixDiskIsolatorProcess::~PosixDiskIsolatorProcess() {}
 
 
 Future<Nothing> PosixDiskIsolatorProcess::recover(
-    const list<ExecutorRunState>& states)
+    const list<ExecutorRunState>& states,
+    const hashset<ContainerID>& orphans)
 {
   foreach (const ExecutorRunState& state, states) {
     // Since we checkpoint the executor after we create its working

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/isolators/posix/disk.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/isolators/posix/disk.hpp b/src/slave/containerizer/isolators/posix/disk.hpp
index 0ccb173..f3f79d8 100644
--- a/src/slave/containerizer/isolators/posix/disk.hpp
+++ b/src/slave/containerizer/isolators/posix/disk.hpp
@@ -78,7 +78,8 @@ public:
   virtual ~PosixDiskIsolatorProcess();
 
   virtual process::Future<Nothing> recover(
-      const std::list<mesos::slave::ExecutorRunState>& states);
+      const std::list<mesos::slave::ExecutorRunState>& states,
+      const hashset<ContainerID>& orphans);
 
   virtual process::Future<Option<CommandInfo>> prepare(
       const ContainerID& containerId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/mesos/containerizer.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index ea3b499..1159397 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -394,17 +394,18 @@ Future<Nothing> MesosContainerizerProcess::recover(
 
   // Try to recover the launcher first.
   return launcher->recover(recoverable)
-    .then(defer(self(), &Self::_recover, recoverable));
+    .then(defer(self(), &Self::_recover, recoverable, lambda::_1));
 }
 
 
 Future<Nothing> MesosContainerizerProcess::_recover(
-    const list<ExecutorRunState>& recoverable)
+    const list<ExecutorRunState>& recoverable,
+    const hashset<ContainerID>& orphans)
 {
   // Then recover the isolators.
   list<Future<Nothing>> futures;
   foreach (const Owned<Isolator>& isolator, isolators) {
-    futures.push_back(isolator->recover(recoverable));
+    futures.push_back(isolator->recover(recoverable, orphans));
   }
 
   // If all isolators recover then continue.

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/slave/containerizer/mesos/containerizer.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/containerizer.hpp b/src/slave/containerizer/mesos/containerizer.hpp
index fb334e5..79407b7 100644
--- a/src/slave/containerizer/mesos/containerizer.hpp
+++ b/src/slave/containerizer/mesos/containerizer.hpp
@@ -162,7 +162,8 @@ public:
 
 private:
   process::Future<Nothing> _recover(
-      const std::list<mesos::slave::ExecutorRunState>& recoverable);
+      const std::list<mesos::slave::ExecutorRunState>& recoverable,
+      const hashset<ContainerID>& orphans);
 
   process::Future<Nothing> __recover(
       const std::list<mesos::slave::ExecutorRunState>& recovered);

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/tests/containerizer_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer_tests.cpp b/src/tests/containerizer_tests.cpp
index adff366..3c9f958 100644
--- a/src/tests/containerizer_tests.cpp
+++ b/src/tests/containerizer_tests.cpp
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+#include <list>
 #include <map>
 #include <string>
 #include <vector>
@@ -49,6 +50,7 @@ using namespace mesos::internal::slave::state;
 
 using namespace mesos::slave;
 
+using std::list;
 using std::map;
 using std::string;
 using std::vector;
@@ -265,6 +267,7 @@ TEST_F(MesosContainerizerIsolatorPreparationTest, MultipleScripts)
 
 class MesosContainerizerExecuteTest : public tests::TemporaryDirectoryTest {};
 
+
 TEST_F(MesosContainerizerExecuteTest, IoRedirection)
 {
   string directory = os::getcwd(); // We're inside a temporary sandbox.
@@ -323,6 +326,7 @@ TEST_F(MesosContainerizerExecuteTest, IoRedirection)
 
 class MesosContainerizerDestroyTest : public MesosTest {};
 
+
 class MockMesosContainerizerProcess : public MesosContainerizerProcess
 {
 public:
@@ -331,7 +335,7 @@ public:
       bool local,
       Fetcher* fetcher,
       const process::Owned<Launcher>& launcher,
-      const std::vector<process::Owned<Isolator>>& isolators)
+      const vector<process::Owned<Isolator>>& isolators)
     : MesosContainerizerProcess(flags, local, fetcher, launcher, isolators)
   {
     // NOTE: See TestContainerizer::setup for why we use
@@ -376,24 +380,25 @@ public:
       .WillRepeatedly(Invoke(this, &MockIsolatorProcess::_prepare));
   }
 
-  MOCK_METHOD1(
+  MOCK_METHOD2(
       recover,
       process::Future<Nothing>(
-          const std::list<mesos::slave::ExecutorRunState>&));
+          const list<mesos::slave::ExecutorRunState>&,
+          const hashset<ContainerID>&));
 
   MOCK_METHOD4(
       prepare,
       process::Future<Option<CommandInfo>>(
           const ContainerID&,
           const ExecutorInfo&,
-          const std::string&,
-          const Option<std::string>&));
+          const string&,
+          const Option<string>&));
 
   virtual process::Future<Option<CommandInfo>> _prepare(
       const ContainerID& containerId,
       const ExecutorInfo& executorInfo,
-      const std::string& directory,
-      const Option<std::string>& user)
+      const string& directory,
+      const Option<string>& user)
   {
     return None();
   }
@@ -429,7 +434,7 @@ TEST_F(MesosContainerizerDestroyTest, DestroyWhileFetching)
   slave::Flags flags = CreateSlaveFlags();
   Try<Launcher*> launcher = PosixLauncher::create(flags);
   ASSERT_SOME(launcher);
-  std::vector<process::Owned<Isolator>> isolators;
+  vector<process::Owned<Isolator>> isolators;
 
   Fetcher fetcher;
 
@@ -574,7 +579,7 @@ TEST_F(MesosContainerizerDestroyTest, LauncherDestroyFailure)
   ASSERT_SOME(launcher_);
   TestLauncher* launcher = new TestLauncher(Owned<Launcher>(launcher_.get()));
 
-  std::vector<process::Owned<Isolator>> isolators;
+  vector<process::Owned<Isolator>> isolators;
   Fetcher fetcher;
 
   MesosContainerizerProcess* process = new MesosContainerizerProcess(

http://git-wip-us.apache.org/repos/asf/mesos/blob/bd0863e8/src/tests/isolator.hpp
----------------------------------------------------------------------
diff --git a/src/tests/isolator.hpp b/src/tests/isolator.hpp
index 93537cb..7db13cd 100644
--- a/src/tests/isolator.hpp
+++ b/src/tests/isolator.hpp
@@ -39,10 +39,11 @@ public:
     return new mesos::slave::Isolator(process);
   }
 
-  MOCK_METHOD1(
+  MOCK_METHOD2(
       recover,
       process::Future<Nothing>(
-          const std::list<mesos::slave::ExecutorRunState>&));
+          const std::list<mesos::slave::ExecutorRunState>&,
+          const hashset<ContainerID>&));
 
   virtual process::Future<Option<CommandInfo> > prepare(
       const ContainerID& containerId,