Repository: mesos Updated Branches: refs/heads/master 18f60da86 -> f4207d4b1
Added master_detector and master_contender flags. The master_detector and master_contender flags allow modules to be used for specifying the MasterContender and MasterDetector implementations to use. Review: https://reviews.apache.org/r/44670/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f4207d4b Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f4207d4b Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f4207d4b Branch: refs/heads/master Commit: f4207d4b1fe5c67502e3fe2e83f1cd3999588404 Parents: e4a82b0 Author: Anurag Singh <anurag.prakash.si...@gmail.com> Authored: Wed Apr 6 15:08:52 2016 -0400 Committer: Kapil Arya <ka...@mesosphere.io> Committed: Wed Apr 6 18:36:18 2016 -0400 ---------------------------------------------------------------------- src/master/flags.cpp | 14 ++++++++++++++ src/master/flags.hpp | 2 ++ src/master/main.cpp | 27 ++++++++++++++++++++++++--- src/slave/flags.cpp | 6 ++++++ src/slave/flags.hpp | 1 + src/slave/main.cpp | 26 +++++++++++++++++++------- 6 files changed, 66 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/master/flags.cpp ---------------------------------------------------------------------- diff --git a/src/master/flags.cpp b/src/master/flags.cpp index 06852c9..e522499 100644 --- a/src/master/flags.cpp +++ b/src/master/flags.cpp @@ -472,4 +472,18 @@ mesos::internal::master::Flags::Flags() "max_completed_tasks_per_framework", "Maximum number of completed tasks per framework to store in memory.", DEFAULT_MAX_COMPLETED_TASKS_PER_FRAMEWORK); + + add(&Flags::master_contender, + "master_contender", + "The symbol name of the master contender to use.\n" + "This symbol should exist in a module specified through\n" + "the --modules flag. Cannot be used in conjunction with --zk.\n" + "Must be used in conjunction with --master_detector."); + + add(&Flags::master_detector, + "master_detector", + "The symbol name of the master detector to use. This symbol\n" + "should exist in a module specified through the --modules flag.\n" + "Cannot be used in conjunction with --zk.\n" + "Must be used in conjunction with --master_contender."); } http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/master/flags.hpp ---------------------------------------------------------------------- diff --git a/src/master/flags.hpp b/src/master/flags.hpp index f8d2cc4..83bb908 100644 --- a/src/master/flags.hpp +++ b/src/master/flags.hpp @@ -82,6 +82,8 @@ public: std::string http_authenticators; size_t max_completed_frameworks; size_t max_completed_tasks_per_framework; + Option<std::string> master_contender; + Option<std::string> master_detector; #ifdef WITH_NETWORK_ISOLATOR Option<size_t> max_executors_per_slave; http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/master/main.cpp ---------------------------------------------------------------------- diff --git a/src/master/main.cpp b/src/master/main.cpp index d85fb07..ea7f0fc 100644 --- a/src/master/main.cpp +++ b/src/master/main.cpp @@ -236,6 +236,21 @@ int main(int argc, char** argv) os::setenv("LIBPROCESS_ADVERTISE_PORT", advertise_port.get()); } + if (zk.isNone()) { + if (flags.master_contender.isSome() ^ flags.master_detector.isSome()) { + EXIT(EXIT_FAILURE) + << flags.usage("Both --master_contender and --master_detector should " + "be specified or omitted."); + } + } else { + if (flags.master_contender.isSome() || flags.master_detector.isSome()) { + EXIT(EXIT_FAILURE) + << flags.usage("Only one of --zk or the " + "--master_contender/--master_detector " + "pair should be specified."); + } + } + // Initialize libprocess. process::initialize("master"); @@ -342,18 +357,24 @@ int main(int argc, char** argv) MasterContender* contender; MasterDetector* detector; - Try<MasterContender*> contender_ = MasterContender::create(zk); + Try<MasterContender*> contender_ = MasterContender::create( + zk, flags.master_contender); + if (contender_.isError()) { EXIT(EXIT_FAILURE) << "Failed to create a master contender: " << contender_.error(); } + contender = contender_.get(); - Try<MasterDetector*> detector_ = MasterDetector::create(zk); + Try<MasterDetector*> detector_ = MasterDetector::create( + zk, flags.master_detector); + if (detector_.isError()) { EXIT(EXIT_FAILURE) << "Failed to create a master detector: " << detector_.error(); } + detector = detector_.get(); Option<Authorizer*> authorizer_ = None(); @@ -477,7 +498,7 @@ int main(int argc, char** argv) slaveRemovalLimiter, flags); - if (zk.isNone()) { + if (zk.isNone() && flags.master_detector.isNone()) { // It means we are using the standalone detector so we need to // appoint this Master as the leader. dynamic_cast<StandaloneMasterDetector*>(detector)->appoint(master->info()); http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/slave/flags.cpp ---------------------------------------------------------------------- diff --git a/src/slave/flags.cpp b/src/slave/flags.cpp index 315cf47..7164afe 100644 --- a/src/slave/flags.cpp +++ b/src/slave/flags.cpp @@ -770,4 +770,10 @@ mesos::internal::slave::Flags::Flags() "and available. The interval between updates is controlled by this\n" "flag.", Seconds(15)); + + add(&Flags::master_detector, + "master_detector", + "The symbol name of the master detector to use. This symbol\n" + "should exist in a module specified through the --modules flag.\n" + "Cannot be used in conjunction with --master."); } http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/slave/flags.hpp ---------------------------------------------------------------------- diff --git a/src/slave/flags.hpp b/src/slave/flags.hpp index 69e1b01..4236b7f 100644 --- a/src/slave/flags.hpp +++ b/src/slave/flags.hpp @@ -143,6 +143,7 @@ public: Option<std::string> qos_controller; Duration qos_correction_interval_min; Duration oversubscribed_resources_interval; + Option<std::string> master_detector; }; } // namespace slave { http://git-wip-us.apache.org/repos/asf/mesos/blob/f4207d4b/src/slave/main.cpp ---------------------------------------------------------------------- diff --git a/src/slave/main.cpp b/src/slave/main.cpp index 8dcf74d..70df4f3 100644 --- a/src/slave/main.cpp +++ b/src/slave/main.cpp @@ -61,6 +61,8 @@ using namespace mesos::internal; using namespace mesos::internal::slave; +using mesos::master::detector::MasterDetector; + using mesos::modules::Anonymous; using mesos::modules::ModuleManager; @@ -164,8 +166,15 @@ int main(int argc, char** argv) return EXIT_SUCCESS; } - if (master.isNone()) { - cerr << flags.usage("Missing required option `--master`") << endl; + if (master.isNone() && flags.master_detector.isNone()) { + cerr << flags.usage("Missing required option `--master` or " + "`--master_detector`.") << endl; + return EXIT_FAILURE; + } + + if (master.isSome() && flags.master_detector.isSome()) { + cerr << flags.usage("Only one of --master or --master_detector options " + "should be specified."); return EXIT_FAILURE; } @@ -262,13 +271,16 @@ int main(int argc, char** argv) << "Failed to create a containerizer: " << containerizer.error(); } - Try<MasterDetector*> detector = MasterDetector::create(master.get()); + Try<MasterDetector*> detector_ = MasterDetector::create( + master, flags.master_detector); - if (detector.isError()) { + if (detector_.isError()) { EXIT(EXIT_FAILURE) - << "Failed to create a master detector: " << detector.error(); + << "Failed to create a master detector: " << detector_.error(); } + MasterDetector* detector = detector_.get(); + if (flags.firewall_rules.isSome()) { vector<Owned<FirewallRule>> rules; @@ -332,7 +344,7 @@ int main(int argc, char** argv) Slave* slave = new Slave( id, flags, - detector.get(), + detector, containerizer.get(), &files, &gc, @@ -349,7 +361,7 @@ int main(int argc, char** argv) delete qosController.get(); - delete detector.get(); + delete detector; delete containerizer.get();