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);
