Repository: mesos
Updated Branches:
  refs/heads/master 1d915a892 -> 88b56261e


Made the StatusUpdateManager injectable for mocking purposes.

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


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

Branch: refs/heads/master
Commit: 88b56261ef5cd6d24c2879a465c2381fa47b8f47
Parents: 1d915a8
Author: Benjamin Mahler <[email protected]>
Authored: Fri Oct 10 15:01:58 2014 -0700
Committer: Benjamin Mahler <[email protected]>
Committed: Fri Oct 10 15:55:30 2014 -0700

----------------------------------------------------------------------
 src/local/local.cpp   | 17 ++++++++++++++++-
 src/slave/main.cpp    | 12 ++++++++++--
 src/slave/slave.cpp   |  6 +++---
 src/slave/slave.hpp   |  3 ++-
 src/tests/cluster.hpp | 17 ++++++++++++++---
 5 files changed, 45 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/88b56261/src/local/local.cpp
----------------------------------------------------------------------
diff --git a/src/local/local.cpp b/src/local/local.cpp
index b8a481d..66de798 100644
--- a/src/local/local.cpp
+++ b/src/local/local.cpp
@@ -52,6 +52,7 @@
 #include "slave/containerizer/containerizer.hpp"
 #include "slave/gc.hpp"
 #include "slave/slave.hpp"
+#include "slave/status_update_manager.hpp"
 
 #include "state/in_memory.hpp"
 #include "state/log.hpp"
@@ -73,6 +74,7 @@ using mesos::internal::master::Repairer;
 using mesos::internal::slave::Containerizer;
 using mesos::internal::slave::GarbageCollector;
 using mesos::internal::slave::Slave;
+using mesos::internal::slave::StatusUpdateManager;
 
 using process::Owned;
 using process::PID;
@@ -103,6 +105,7 @@ static MasterContender* contender = NULL;
 static Option<Authorizer*> authorizer = None();
 static Files* files = NULL;
 static vector<GarbageCollector*>* garbageCollectors = NULL;
+static vector<StatusUpdateManager*>* statusUpdateManagers = NULL;
 
 
 PID<Master> launch(const Flags& flags, Allocator* _allocator)
@@ -197,6 +200,7 @@ PID<Master> launch(const Flags& flags, Allocator* 
_allocator)
   PID<Master> pid = process::spawn(master);
 
   garbageCollectors = new vector<GarbageCollector*>();
+  statusUpdateManagers = new vector<StatusUpdateManager*>();
 
   vector<UPID> pids;
 
@@ -210,6 +214,7 @@ PID<Master> launch(const Flags& flags, Allocator* 
_allocator)
     }
 
     garbageCollectors->push_back(new GarbageCollector());
+    statusUpdateManagers->push_back(new StatusUpdateManager());
 
     Try<Containerizer*> containerizer = Containerizer::create(flags, true);
     if (containerizer.isError()) {
@@ -226,8 +231,11 @@ PID<Master> launch(const Flags& flags, Allocator* 
_allocator)
         detector,
         containerizer.get(),
         files,
-        garbageCollectors->back());
+        garbageCollectors->back(),
+        statusUpdateManagers->back());
+
     slaves[containerizer.get()] = slave;
+
     pids.push_back(process::spawn(slave));
   }
 
@@ -281,6 +289,13 @@ void shutdown()
     delete garbageCollectors;
     garbageCollectors = NULL;
 
+    foreach (StatusUpdateManager* statusUpdateManager, *statusUpdateManagers) {
+      delete statusUpdateManager;
+    }
+
+    delete statusUpdateManagers;
+    statusUpdateManagers = NULL;
+
     delete registrar;
     registrar = NULL;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/88b56261/src/slave/main.cpp
----------------------------------------------------------------------
diff --git a/src/slave/main.cpp b/src/slave/main.cpp
index 2c4d365..1eafb35 100644
--- a/src/slave/main.cpp
+++ b/src/slave/main.cpp
@@ -35,6 +35,7 @@
 
 #include "slave/gc.hpp"
 #include "slave/slave.hpp"
+#include "slave/status_update_manager.hpp"
 
 using namespace mesos::internal;
 using namespace mesos::internal::slave;
@@ -151,9 +152,16 @@ int main(int argc, char** argv)
 
   Files files;
   GarbageCollector gc;
+  StatusUpdateManager statusUpdateManager;
+
+  Slave* slave = new Slave(
+      flags,
+      detector.get(),
+      containerizer.get(),
+      &files,
+      &gc,
+      &statusUpdateManager);
 
-  Slave* slave =
-    new Slave(flags, detector.get(), containerizer.get(), &files, &gc);
   process::spawn(slave);
 
   process::wait(slave->self());

http://git-wip-us.apache.org/repos/asf/mesos/blob/88b56261/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 2b55050..0e342ed 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -104,7 +104,8 @@ Slave::Slave(const slave::Flags& _flags,
              MasterDetector* _detector,
              Containerizer* _containerizer,
              Files* _files,
-             GarbageCollector* _gc)
+             GarbageCollector* _gc,
+             StatusUpdateManager* _statusUpdateManager)
   : ProcessBase(process::ID::generate("slave")),
     state(RECOVERING),
     http(this),
@@ -116,7 +117,7 @@ Slave::Slave(const slave::Flags& _flags,
     metrics(*this),
     gc(_gc),
     monitor(containerizer),
-    statusUpdateManager(new StatusUpdateManager()),
+    statusUpdateManager(_statusUpdateManager),
     metaDir(paths::getMetaRootDir(flags.work_dir)),
     recoveryErrors(0),
     credential(None()),
@@ -138,7 +139,6 @@ Slave::~Slave()
   }
 
   delete authenticatee;
-  delete statusUpdateManager;
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/88b56261/src/slave/slave.hpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index efd309e..342b09f 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -90,7 +90,8 @@ public:
         MasterDetector* detector,
         Containerizer* containerizer,
         Files* files,
-        GarbageCollector* gc);
+        GarbageCollector* gc,
+        StatusUpdateManager* statusUpdateManager);
 
   virtual ~Slave();
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/88b56261/src/tests/cluster.hpp
----------------------------------------------------------------------
diff --git a/src/tests/cluster.hpp b/src/tests/cluster.hpp
index aad4275..ee194ad 100644
--- a/src/tests/cluster.hpp
+++ b/src/tests/cluster.hpp
@@ -65,6 +65,7 @@
 #include "slave/gc.hpp"
 #include "slave/containerizer/containerizer.hpp"
 #include "slave/slave.hpp"
+#include "slave/status_update_manager.hpp"
 
 #include "state/in_memory.hpp"
 #include "state/log.hpp"
@@ -154,7 +155,9 @@ public:
         const slave::Flags& flags = slave::Flags(),
         const Option<slave::Containerizer*>& containerizer = None(),
         const Option<MasterDetector*>& detector = None(),
-        const Option<slave::GarbageCollector*>& gc = None());
+        const Option<slave::GarbageCollector*>& gc = None(),
+        const Option<slave::StatusUpdateManager*>& statusUpdateManager =
+          None());
 
     // Stops and cleans up a slave at the specified PID. If 'shutdown'
     // is true than the slave is sent a shutdown message instead of
@@ -182,6 +185,7 @@ public:
       slave::Containerizer* containerizer;
       bool createdContainerizer; // Whether we own the containerizer.
 
+      process::Owned<slave::StatusUpdateManager> statusUpdateManager;
       process::Owned<slave::GarbageCollector> gc;
       process::Owned<MasterDetector> detector;
       slave::Flags flags;
@@ -454,7 +458,8 @@ inline Try<process::PID<slave::Slave> > 
Cluster::Slaves::start(
     const slave::Flags& flags,
     const Option<slave::Containerizer*>& containerizer,
     const Option<MasterDetector*>& detector,
-    const Option<slave::GarbageCollector*>& gc)
+    const Option<slave::GarbageCollector*>& gc,
+    const Option<slave::StatusUpdateManager*>& statusUpdateManager)
 {
   // TODO(benh): Create a work directory if using the default.
 
@@ -481,6 +486,11 @@ inline Try<process::PID<slave::Slave> > 
Cluster::Slaves::start(
     slave.gc.reset(new slave::GarbageCollector());
   }
 
+  // Create a status update manager if one wasn't provided.
+  if (statusUpdateManager.isNone()) {
+    slave.statusUpdateManager.reset(new slave::StatusUpdateManager());
+  }
+
   slave.flags = flags;
 
   slave.slave = new slave::Slave(
@@ -488,7 +498,8 @@ inline Try<process::PID<slave::Slave> > 
Cluster::Slaves::start(
       detector.get(slave.detector.get()),
       slave.containerizer,
       &cluster->files,
-      gc.get(slave.gc.get()));
+      gc.get(slave.gc.get()),
+      statusUpdateManager.get(slave.statusUpdateManager.get()));
 
   process::PID<slave::Slave> pid = process::spawn(slave.slave);
 

Reply via email to