Moved functions in promises to a common header file. Review: https://reviews.apache.org/r/44546/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/be1fb947 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/be1fb947 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/be1fb947 Branch: refs/heads/master Commit: be1fb947b5bdd178ce05fd1c20e26d408fcd0d63 Parents: adcd8b6 Author: Anurag Singh <anurag.prakash.si...@gmail.com> Authored: Wed Apr 6 15:08:34 2016 -0400 Committer: Kapil Arya <ka...@mesosphere.io> Committed: Wed Apr 6 18:36:18 2016 -0400 ---------------------------------------------------------------------- src/master/detector/standalone.cpp | 64 ++------------------------ src/master/detector/zookeeper.cpp | 80 +++++---------------------------- 2 files changed, 15 insertions(+), 129 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/be1fb947/src/master/detector/standalone.cpp ---------------------------------------------------------------------- diff --git a/src/master/detector/standalone.cpp b/src/master/detector/standalone.cpp index 6e21e65..0b5de9e 100644 --- a/src/master/detector/standalone.cpp +++ b/src/master/detector/standalone.cpp @@ -50,63 +50,6 @@ namespace mesos { namespace master { namespace detector { -// TODO(bmahler): Consider moving these kinds of helpers into -// libprocess or a common header within mesos. -namespace promises { - -// Helper for setting a set of Promises. -template <typename T> -void set(std::set<Promise<T>*>* promises, const T& t) -{ - foreach (Promise<T>* promise, *promises) { - promise->set(t); - delete promise; - } - promises->clear(); -} - - -// Helper for failing a set of Promises. -template <typename T> -void fail(std::set<Promise<T>*>* promises, const string& failure) -{ - foreach (Promise<Option<MasterInfo>>* promise, *promises) { - promise->fail(failure); - delete promise; - } - promises->clear(); -} - - -// Helper for discarding a set of Promises. -template <typename T> -void discard(std::set<Promise<T>*>* promises) -{ - foreach (Promise<T>* promise, *promises) { - promise->discard(); - delete promise; - } - promises->clear(); -} - - -// Helper for discarding an individual promise in the set. -template <typename T> -void discard(std::set<Promise<T>*>* promises, const Future<T>& future) -{ - foreach (Promise<T>* promise, *promises) { - if (promise->future() == future) { - promise->discard(); - promises->erase(promise); - delete promise; - return; - } - } -} - -} // namespace promises { - - class StandaloneMasterDetectorProcess : public Process<StandaloneMasterDetectorProcess> { @@ -119,14 +62,14 @@ public: ~StandaloneMasterDetectorProcess() { - promises::discard(&promises); + discardPromises(&promises); } void appoint(const Option<MasterInfo>& leader_) { leader = leader_; - promises::set(&promises, leader); + setPromises(&promises, leader); } Future<Option<MasterInfo>> detect( @@ -149,7 +92,7 @@ private: void discard(const Future<Option<MasterInfo>>& future) { // Discard the promise holding this future. - promises::discard(&promises, future); + discardPromises(&promises, future); } Option<MasterInfo> leader; // The appointed master. @@ -208,7 +151,6 @@ Future<Option<MasterInfo>> StandaloneMasterDetector::detect( return dispatch(process, &StandaloneMasterDetectorProcess::detect, previous); } - } // namespace detector { } // namespace master { } // namespace mesos { http://git-wip-us.apache.org/repos/asf/mesos/blob/be1fb947/src/master/detector/zookeeper.cpp ---------------------------------------------------------------------- diff --git a/src/master/detector/zookeeper.cpp b/src/master/detector/zookeeper.cpp index fe26e22..8f226b5 100644 --- a/src/master/detector/zookeeper.cpp +++ b/src/master/detector/zookeeper.cpp @@ -57,63 +57,6 @@ namespace detector { const Duration MASTER_DETECTOR_ZK_SESSION_TIMEOUT = Seconds(10); -// TODO(bmahler): Consider moving these kinds of helpers into -// libprocess or a common header within mesos. -namespace promises { - -// Helper for setting a set of Promises. -template <typename T> -void set(std::set<Promise<T>*>* promises, const T& t) -{ - foreach (Promise<T>* promise, *promises) { - promise->set(t); - delete promise; - } - promises->clear(); -} - - -// Helper for failing a set of Promises. -template <typename T> -void fail(std::set<Promise<T>*>* promises, const string& failure) -{ - foreach (Promise<Option<MasterInfo>>* promise, *promises) { - promise->fail(failure); - delete promise; - } - promises->clear(); -} - - -// Helper for discarding a set of Promises. -template <typename T> -void discard(std::set<Promise<T>*>* promises) -{ - foreach (Promise<T>* promise, *promises) { - promise->discard(); - delete promise; - } - promises->clear(); -} - - -// Helper for discarding an individual promise in the set. -template <typename T> -void discard(std::set<Promise<T>*>* promises, const Future<T>& future) -{ - foreach (Promise<T>* promise, *promises) { - if (promise->future() == future) { - promise->discard(); - promises->erase(promise); - delete promise; - return; - } - } -} - -} // namespace promises { - - class ZooKeeperMasterDetectorProcess : public Process<ZooKeeperMasterDetectorProcess> { @@ -168,7 +111,7 @@ ZooKeeperMasterDetectorProcess::ZooKeeperMasterDetectorProcess( ZooKeeperMasterDetectorProcess::~ZooKeeperMasterDetectorProcess() { - promises::discard(&promises); + discardPromises(&promises); } @@ -183,7 +126,7 @@ void ZooKeeperMasterDetectorProcess::discard( const Future<Option<MasterInfo>>& future) { // Discard the promise holding this future. - promises::discard(&promises, future); + discardPromises(&promises, future); } @@ -224,7 +167,7 @@ void ZooKeeperMasterDetectorProcess::detected( error = Error(_leader.failure()); leader = None(); - promises::fail(&promises, _leader.failure()); + failPromises(&promises, _leader.failure()); return; } @@ -232,7 +175,7 @@ void ZooKeeperMasterDetectorProcess::detected( if (_leader.get().isNone()) { leader = None(); - promises::set(&promises, leader); + setPromises(&promises, leader); } else { // Fetch the data associated with the leader. group->data(_leader.get().get()) @@ -253,12 +196,12 @@ void ZooKeeperMasterDetectorProcess::fetched( if (data.isFailed()) { leader = None(); - promises::fail(&promises, data.failure()); + failPromises(&promises, data.failure()); return; } else if (data.get().isNone()) { // Membership is gone before we can read its data. leader = None(); - promises::set(&promises, leader); + setPromises(&promises, leader); return; } @@ -276,7 +219,8 @@ void ZooKeeperMasterDetectorProcess::fetched( MasterInfo info; if (!info.ParseFromString(data.get().get())) { leader = None(); - promises::fail(&promises, "Failed to parse data into MasterInfo"); + failPromises(&promises, + "Failed to parse data into MasterInfo"); return; } LOG(WARNING) << "Leading master " << info.pid() @@ -290,7 +234,7 @@ void ZooKeeperMasterDetectorProcess::fetched( if (object.isError()) { leader = None(); - promises::fail( + failPromises( &promises, "Failed to parse data into valid JSON: " + object.error()); return; @@ -301,7 +245,7 @@ void ZooKeeperMasterDetectorProcess::fetched( if (info.isError()) { leader = None(); - promises::fail( + failPromises( &promises, "Failed to parse JSON into a valid MasterInfo protocol buffer: " + info.error()); @@ -311,7 +255,7 @@ void ZooKeeperMasterDetectorProcess::fetched( leader = info.get(); } else { leader = None(); - promises::fail( + failPromises( &promises, "Failed to parse data of unknown label '" + label.get() + "'"); return; @@ -320,7 +264,7 @@ void ZooKeeperMasterDetectorProcess::fetched( LOG(INFO) << "A new leading master (UPID=" << UPID(leader.get().pid()) << ") is detected"; - promises::set(&promises, leader); + setPromises(&promises, leader); }