Repository: mesos Updated Branches: refs/heads/master d1c6173ab -> 97b2507aa
Passed `--zk_session_timeout` to ZK master contender and detector. Currently `ZooKeeperMasterContender` and `ZooKeeperMasterDetector` use hardcoded session timeouts and do not respect `--zk_session_timeout` option. This patch fixes it. Review: https://reviews.apache.org/r/58421/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/8cf5c51d Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/8cf5c51d Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/8cf5c51d Branch: refs/heads/master Commit: 8cf5c51d1be75d6c3168cd941ccadc98c57ca79c Parents: d1c6173 Author: Ilya Pronin <[email protected]> Authored: Mon Apr 24 14:53:07 2017 -0700 Committer: Vinod Kone <[email protected]> Committed: Mon Apr 24 14:53:07 2017 -0700 ---------------------------------------------------------------------- include/mesos/master/contender.hpp | 4 +++- include/mesos/master/detector.hpp | 4 +++- src/master/contender/contender.cpp | 7 +++++-- src/master/contender/zookeeper.cpp | 16 +++++++++++----- src/master/contender/zookeeper.hpp | 5 ++++- src/master/detector/detector.cpp | 7 +++++-- src/master/detector/zookeeper.cpp | 17 +++++++++++------ src/master/detector/zookeeper.hpp | 5 ++++- src/master/main.cpp | 4 ++-- src/tests/master_contender_detector_tests.cpp | 8 +++++--- 10 files changed, 53 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/include/mesos/master/contender.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/master/contender.hpp b/include/mesos/master/contender.hpp index 2c485ef..6392558 100644 --- a/include/mesos/master/contender.hpp +++ b/include/mesos/master/contender.hpp @@ -23,6 +23,7 @@ #include <process/future.hpp> +#include <stout/duration.hpp> #include <stout/nothing.hpp> #include <stout/option.hpp> #include <stout/try.hpp> @@ -58,7 +59,8 @@ public: */ static Try<MasterContender*> create( const Option<std::string>& zk, - const Option<std::string>& masterContenderModule = None()); + const Option<std::string>& masterContenderModule = None(), + const Option<Duration>& zkSessionTimeout = None()); /** * Note that the contender's membership, if obtained, is scheduled http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/include/mesos/master/detector.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/master/detector.hpp b/include/mesos/master/detector.hpp index f53c7c0..12eabba 100644 --- a/include/mesos/master/detector.hpp +++ b/include/mesos/master/detector.hpp @@ -23,6 +23,7 @@ #include <process/future.hpp> +#include <stout/duration.hpp> #include <stout/option.hpp> #include <stout/try.hpp> @@ -55,7 +56,8 @@ public: */ static Try<MasterDetector*> create( const Option<std::string>& zk, - const Option<std::string>& masterDetectorModule = None()); + const Option<std::string>& masterDetectorModule = None(), + const Option<Duration>& zkSessionTimeout = None()); virtual ~MasterDetector() = 0; http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/contender/contender.cpp ---------------------------------------------------------------------- diff --git a/src/master/contender/contender.cpp b/src/master/contender/contender.cpp index cc486a1..ea7453d 100644 --- a/src/master/contender/contender.cpp +++ b/src/master/contender/contender.cpp @@ -36,7 +36,8 @@ namespace contender { Try<MasterContender*> MasterContender::create( const Option<string>& zk_, - const Option<string>& masterContenderModule_) + const Option<string>& masterContenderModule_, + const Option<Duration>& zkSessionTimeout_) { if (masterContenderModule_.isSome()) { return modules::ModuleManager::create<MasterContender>( @@ -58,7 +59,9 @@ Try<MasterContender*> MasterContender::create( return Error( "Expecting a (chroot) path for ZooKeeper ('/' is not supported)"); } - return new ZooKeeperMasterContender(url.get()); + return new ZooKeeperMasterContender( + url.get(), + zkSessionTimeout_.getOrElse(MASTER_CONTENDER_ZK_SESSION_TIMEOUT)); } else if (strings::startsWith(zk, "file://")) { // Load the configuration out of a file. While Mesos and related // programs always use <stout/flags> to process the command line http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/contender/zookeeper.cpp ---------------------------------------------------------------------- diff --git a/src/master/contender/zookeeper.cpp b/src/master/contender/zookeeper.cpp index 1aa8f53..6801c91 100644 --- a/src/master/contender/zookeeper.cpp +++ b/src/master/contender/zookeeper.cpp @@ -46,7 +46,10 @@ class ZooKeeperMasterContenderProcess : public Process<ZooKeeperMasterContenderProcess> { public: - explicit ZooKeeperMasterContenderProcess(const zookeeper::URL& url); + explicit ZooKeeperMasterContenderProcess( + const zookeeper::URL& url, + const Duration& sessionTimeout); + explicit ZooKeeperMasterContenderProcess(Owned<zookeeper::Group> group); virtual ~ZooKeeperMasterContenderProcess(); @@ -68,9 +71,11 @@ private: }; -ZooKeeperMasterContender::ZooKeeperMasterContender(const zookeeper::URL& url) +ZooKeeperMasterContender::ZooKeeperMasterContender( + const zookeeper::URL& url, + const Duration& sessionTimeout) { - process = new ZooKeeperMasterContenderProcess(url); + process = new ZooKeeperMasterContenderProcess(url, sessionTimeout); spawn(process); } @@ -103,9 +108,10 @@ Future<Future<Nothing>> ZooKeeperMasterContender::contend() ZooKeeperMasterContenderProcess::ZooKeeperMasterContenderProcess( - const zookeeper::URL& url) + const zookeeper::URL& url, + const Duration& sessionTimeout) : ZooKeeperMasterContenderProcess(Owned<Group>( - new Group(url, MASTER_CONTENDER_ZK_SESSION_TIMEOUT))) {} + new Group(url, sessionTimeout))) {} ZooKeeperMasterContenderProcess::ZooKeeperMasterContenderProcess( http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/contender/zookeeper.hpp ---------------------------------------------------------------------- diff --git a/src/master/contender/zookeeper.hpp b/src/master/contender/zookeeper.hpp index becb93f..d280222 100644 --- a/src/master/contender/zookeeper.hpp +++ b/src/master/contender/zookeeper.hpp @@ -44,7 +44,10 @@ class ZooKeeperMasterContender : public MasterContender public: // Creates a contender that uses ZooKeeper to determine (i.e., // elect) a leading master. - explicit ZooKeeperMasterContender(const zookeeper::URL& url); + explicit ZooKeeperMasterContender( + const zookeeper::URL& url, + const Duration& sessionTimeout = MASTER_CONTENDER_ZK_SESSION_TIMEOUT); + explicit ZooKeeperMasterContender(process::Owned<zookeeper::Group> group); virtual ~ZooKeeperMasterContender(); http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/detector/detector.cpp ---------------------------------------------------------------------- diff --git a/src/master/detector/detector.cpp b/src/master/detector/detector.cpp index 0ba29ca..9d2e8c4 100644 --- a/src/master/detector/detector.cpp +++ b/src/master/detector/detector.cpp @@ -45,7 +45,8 @@ namespace detector { Try<MasterDetector*> MasterDetector::create( const Option<string>& zk_, - const Option<string>& masterDetectorModule_) + const Option<string>& masterDetectorModule_, + const Option<Duration>& zkSessionTimeout_) { if (masterDetectorModule_.isSome()) { return modules::ModuleManager::create<MasterDetector>( @@ -67,7 +68,9 @@ Try<MasterDetector*> MasterDetector::create( return Error( "Expecting a (chroot) path for ZooKeeper ('/' is not supported)"); } - return new ZooKeeperMasterDetector(url.get()); + return new ZooKeeperMasterDetector( + url.get(), + zkSessionTimeout_.getOrElse(MASTER_DETECTOR_ZK_SESSION_TIMEOUT)); } else if (strings::startsWith(zk, "file://")) { // Load the configuration out of a file. While Mesos and related // programs always use <stout/flags> to process the command line http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/detector/zookeeper.cpp ---------------------------------------------------------------------- diff --git a/src/master/detector/zookeeper.cpp b/src/master/detector/zookeeper.cpp index a737d24..1cab567 100644 --- a/src/master/detector/zookeeper.cpp +++ b/src/master/detector/zookeeper.cpp @@ -56,7 +56,10 @@ class ZooKeeperMasterDetectorProcess : public Process<ZooKeeperMasterDetectorProcess> { public: - explicit ZooKeeperMasterDetectorProcess(const zookeeper::URL& url); + explicit ZooKeeperMasterDetectorProcess( + const zookeeper::URL& url, + const Duration& sessionTimeout); + explicit ZooKeeperMasterDetectorProcess(Owned<Group> group); ~ZooKeeperMasterDetectorProcess(); @@ -86,12 +89,12 @@ private: }; -// TODO(benh): Get ZooKeeper timeout from configuration. ZooKeeperMasterDetectorProcess::ZooKeeperMasterDetectorProcess( - const zookeeper::URL& url) + const zookeeper::URL& url, + const Duration& sessionTimeout) : ZooKeeperMasterDetectorProcess(Owned<Group>( new Group(url.servers, - MASTER_DETECTOR_ZK_SESSION_TIMEOUT, + sessionTimeout, url.path, url.authentication))) {} @@ -263,9 +266,11 @@ void ZooKeeperMasterDetectorProcess::fetched( } -ZooKeeperMasterDetector::ZooKeeperMasterDetector(const zookeeper::URL& url) +ZooKeeperMasterDetector::ZooKeeperMasterDetector( + const zookeeper::URL& url, + const Duration& sessionTimeout) { - process = new ZooKeeperMasterDetectorProcess(url); + process = new ZooKeeperMasterDetectorProcess(url, sessionTimeout); spawn(process); } http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/detector/zookeeper.hpp ---------------------------------------------------------------------- diff --git a/src/master/detector/zookeeper.hpp b/src/master/detector/zookeeper.hpp index 5b531e0..5d0435e 100644 --- a/src/master/detector/zookeeper.hpp +++ b/src/master/detector/zookeeper.hpp @@ -46,7 +46,10 @@ class ZooKeeperMasterDetector : public MasterDetector public: // Creates a detector which uses ZooKeeper to determine (i.e., // elect) a leading master. - explicit ZooKeeperMasterDetector(const zookeeper::URL& url); + explicit ZooKeeperMasterDetector( + const zookeeper::URL& url, + const Duration& sessionTimeout = MASTER_DETECTOR_ZK_SESSION_TIMEOUT); + // Used for testing purposes. explicit ZooKeeperMasterDetector(process::Owned<zookeeper::Group> group); virtual ~ZooKeeperMasterDetector(); http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/master/main.cpp ---------------------------------------------------------------------- diff --git a/src/master/main.cpp b/src/master/main.cpp index 95a482b..462ed32 100644 --- a/src/master/main.cpp +++ b/src/master/main.cpp @@ -400,7 +400,7 @@ int main(int argc, char** argv) MasterDetector* detector; Try<MasterContender*> contender_ = MasterContender::create( - flags.zk, flags.master_contender); + flags.zk, flags.master_contender, flags.zk_session_timeout); if (contender_.isError()) { EXIT(EXIT_FAILURE) @@ -410,7 +410,7 @@ int main(int argc, char** argv) contender = contender_.get(); Try<MasterDetector*> detector_ = MasterDetector::create( - flags.zk, flags.master_detector); + flags.zk, flags.master_detector, flags.zk_session_timeout); if (detector_.isError()) { EXIT(EXIT_FAILURE) http://git-wip-us.apache.org/repos/asf/mesos/blob/8cf5c51d/src/tests/master_contender_detector_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/master_contender_detector_tests.cpp b/src/tests/master_contender_detector_tests.cpp index c8c1ea0..f499136 100644 --- a/src/tests/master_contender_detector_tests.cpp +++ b/src/tests/master_contender_detector_tests.cpp @@ -469,7 +469,9 @@ TEST_F(ZooKeeperMasterContenderDetectorTest, ContenderDetectorShutdownNetwork) ASSERT_SOME(url); - ZooKeeperMasterContender contender(url.get()); + Duration sessionTimeout = Seconds(15); + + ZooKeeperMasterContender contender(url.get(), sessionTimeout); PID<Master> pid; pid.address.ip = net::IP(10000000); @@ -483,7 +485,7 @@ TEST_F(ZooKeeperMasterContenderDetectorTest, ContenderDetectorShutdownNetwork) AWAIT_READY(contended); Future<Nothing> lostCandidacy = contended.get(); - ZooKeeperMasterDetector detector(url.get()); + ZooKeeperMasterDetector detector(url.get(), sessionTimeout); Future<Option<MasterInfo>> leader = detector.detect(); AWAIT_READY(leader); @@ -497,7 +499,7 @@ TEST_F(ZooKeeperMasterContenderDetectorTest, ContenderDetectorShutdownNetwork) // We may need to advance multiple times because we could have // advanced the clock before the timer in Group starts. while (lostCandidacy.isPending() || leader.isPending()) { - Clock::advance(MASTER_CONTENDER_ZK_SESSION_TIMEOUT); + Clock::advance(sessionTimeout); Clock::settle(); }
