You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ka...@apache.org on 2016/04/07 00:48:40 UTC

[10/11] mesos git commit: Implemented create methods in MasterContender and MasterDetector.

Implemented create methods in MasterContender and MasterDetector.

The create method can be used to create a MasterContender/Detector from a
module (specified using the --modules flag on the command line). If the
contender/detector module names have not been specified, the method will
fall back to its prior behavior.

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


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

Branch: refs/heads/master
Commit: e4a82b00d28998ab9a165950e683e5b46a7eb386
Parents: cbbc8f0
Author: Anurag Singh <an...@gmail.com>
Authored: Wed Apr 6 15:08:48 2016 -0400
Committer: Kapil Arya <ka...@mesosphere.io>
Committed: Wed Apr 6 18:36:18 2016 -0400

----------------------------------------------------------------------
 include/mesos/master/contender.hpp |  4 ++--
 include/mesos/master/detector.hpp  |  4 ++--
 src/master/contender/contender.cpp | 29 ++++++++++++++++++--------
 src/master/detector/detector.cpp   | 37 ++++++++++++++++++++-------------
 4 files changed, 47 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/e4a82b00/include/mesos/master/contender.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/master/contender.hpp b/include/mesos/master/contender.hpp
index 268dc50..2c485ef 100644
--- a/include/mesos/master/contender.hpp
+++ b/include/mesos/master/contender.hpp
@@ -57,8 +57,8 @@ public:
    * Note that the returned contender still needs to be `initialize()`d.
    */
   static Try<MasterContender*> create(
-      const Option<std::String>& masterContenderModule,
-      const Option<std::string>& zk);
+      const Option<std::string>& zk,
+      const Option<std::string>& masterContenderModule = None());
 
   /**
    * Note that the contender's membership, if obtained, is scheduled

http://git-wip-us.apache.org/repos/asf/mesos/blob/e4a82b00/include/mesos/master/detector.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/master/detector.hpp b/include/mesos/master/detector.hpp
index 0cb9fe1..f53c7c0 100644
--- a/include/mesos/master/detector.hpp
+++ b/include/mesos/master/detector.hpp
@@ -54,8 +54,8 @@ public:
    * If both arguments are `None`, `StandaloneMasterDetector` is returned.
    */
   static Try<MasterDetector*> create(
-      const Option<std::String>& masterDetectorModule,
-      const Option<std::string>& zk);
+      const Option<std::string>& zk,
+      const Option<std::string>& masterDetectorModule = None());
 
   virtual ~MasterDetector() = 0;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/e4a82b00/src/master/contender/contender.cpp
----------------------------------------------------------------------
diff --git a/src/master/contender/contender.cpp b/src/master/contender/contender.cpp
index 07735d0..9ad6252 100644
--- a/src/master/contender/contender.cpp
+++ b/src/master/contender/contender.cpp
@@ -16,6 +16,8 @@
 
 #include <mesos/master/contender.hpp>
 
+#include <mesos/module/contender.hpp>
+
 #include <process/defer.hpp>
 #include <process/id.hpp>
 #include <process/process.hpp>
@@ -30,6 +32,8 @@
 #include "master/contender/standalone.hpp"
 #include "master/contender/zookeeper.hpp"
 
+#include "module/manager.hpp"
+
 #include "zookeeper/url.hpp"
 
 using std::string;
@@ -40,16 +44,23 @@ namespace mesos {
 namespace master {
 namespace contender {
 
-Try<MasterContender*> MasterContender::create(const Option<string>& _mechanism)
+Try<MasterContender*> MasterContender::create(
+      const Option<std::string>& zk_,
+      const Option<std::string>& masterContenderModule_)
 {
-  if (_mechanism.isNone()) {
+  if (masterContenderModule_.isSome()) {
+    return modules::ModuleManager::create<MasterContender>(
+        masterContenderModule_.get());
+  }
+
+  if (zk_.isNone()) {
     return new StandaloneMasterContender();
   }
 
-  string mechanism = _mechanism.get();
+  string zk = zk_.get();
 
-  if (strings::startsWith(mechanism, "zk://")) {
-    Try<zookeeper::URL> url = zookeeper::URL::parse(mechanism);
+  if (strings::startsWith(zk, "zk://")) {
+    Try<zookeeper::URL> url = zookeeper::URL::parse(zk);
     if (url.isError()) {
       return Error(url.error());
     }
@@ -58,7 +69,7 @@ Try<MasterContender*> MasterContender::create(const Option<string>& _mechanism)
           "Expecting a (chroot) path for ZooKeeper ('/' is not supported)");
     }
     return new ZooKeeperMasterContender(url.get());
-  } else if (strings::startsWith(mechanism, "file://")) {
+  } 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
     // arguments (and therefore file://) this entrypoint is exposed by
@@ -76,7 +87,7 @@ Try<MasterContender*> MasterContender::create(const Option<string>& _mechanism)
     LOG(WARNING) << "Specifying master election mechanism / ZooKeeper URL to "
                     "be read out of a file via 'file://' is deprecated inside "
                     "Mesos and will be removed in a future release.";
-    const string& path = mechanism.substr(7);
+    const string& path = zk.substr(7);
     const Try<string> read = os::read(path);
     if (read.isError()) {
       return Error("Failed to read from file at '" + path + "'");
@@ -85,9 +96,9 @@ Try<MasterContender*> MasterContender::create(const Option<string>& _mechanism)
     return create(strings::trim(read.get()));
   }
 
-  CHECK(!strings::startsWith(mechanism, "file://"));
+  CHECK(!strings::startsWith(zk, "file://"));
 
-  return Error("Failed to parse '" + mechanism + "'");
+  return Error("Failed to parse '" + zk + "'");
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/e4a82b00/src/master/detector/detector.cpp
----------------------------------------------------------------------
diff --git a/src/master/detector/detector.cpp b/src/master/detector/detector.cpp
index b5fe9ec..3851732 100644
--- a/src/master/detector/detector.cpp
+++ b/src/master/detector/detector.cpp
@@ -19,6 +19,8 @@
 
 #include <mesos/master/detector.hpp>
 
+#include <mesos/module/detector.hpp>
+
 #include <process/defer.hpp>
 #include <process/dispatch.hpp>
 #include <process/future.hpp>
@@ -42,6 +44,8 @@
 
 #include "messages/messages.hpp"
 
+#include "module/manager.hpp"
+
 #include "zookeeper/url.hpp"
 
 using namespace process;
@@ -54,17 +58,23 @@ namespace mesos {
 namespace master {
 namespace detector {
 
-
-Try<MasterDetector*> MasterDetector::create(const Option<string>& _mechanism)
+Try<MasterDetector*> MasterDetector::create(
+      const Option<std::string>& zk_,
+      const Option<std::string>& masterDetectorModule_)
 {
-  if (_mechanism.isNone()) {
+  if (masterDetectorModule_.isSome()) {
+    return modules::ModuleManager::create<MasterDetector>(
+        masterDetectorModule_.get());
+  }
+
+  if (zk_.isNone()) {
     return new StandaloneMasterDetector();
   }
 
-  string mechanism = _mechanism.get();
+  string zk = zk_.get();
 
-  if (strings::startsWith(mechanism, "zk://")) {
-    Try<zookeeper::URL> url = zookeeper::URL::parse(mechanism);
+  if (strings::startsWith(zk, "zk://")) {
+    Try<zookeeper::URL> url = zookeeper::URL::parse(zk);
     if (url.isError()) {
       return Error(url.error());
     }
@@ -73,7 +83,7 @@ Try<MasterDetector*> MasterDetector::create(const Option<string>& _mechanism)
           "Expecting a (chroot) path for ZooKeeper ('/' is not supported)");
     }
     return new ZooKeeperMasterDetector(url.get());
-  } else if (strings::startsWith(mechanism, "file://")) {
+  } 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
     // arguments (and therefore file://) this entrypoint is exposed by
@@ -91,7 +101,7 @@ Try<MasterDetector*> MasterDetector::create(const Option<string>& _mechanism)
     LOG(WARNING) << "Specifying master detection mechanism / ZooKeeper URL to "
                     "be read out of a file via 'file://' is deprecated inside "
                     "Mesos and will be removed in a future release.";
-    const string& path = mechanism.substr(7);
+    const string& path = zk.substr(7);
     const Try<string> read = os::read(path);
     if (read.isError()) {
       return Error("Failed to read from file at '" + path + "'");
@@ -100,15 +110,15 @@ Try<MasterDetector*> MasterDetector::create(const Option<string>& _mechanism)
     return create(strings::trim(read.get()));
   }
 
-  CHECK(!strings::startsWith(mechanism, "file://"));
+  CHECK(!strings::startsWith(zk, "file://"));
 
   // Okay, try and parse what we got as a PID.
-  UPID pid = mechanism.find("master@") == 0
-             ? UPID(mechanism)
-             : UPID("master@" + mechanism);
+  UPID pid = zk.find("master@") == 0
+             ? UPID(zk)
+             : UPID("master@" + zk);
 
   if (!pid) {
-    return Error("Failed to parse '" + mechanism + "'");
+    return Error("Failed to parse '" + zk + "'");
   }
 
   return new StandaloneMasterDetector(
@@ -118,7 +128,6 @@ Try<MasterDetector*> MasterDetector::create(const Option<string>& _mechanism)
 
 MasterDetector::~MasterDetector() {}
 
-
 } // namespace detector {
 } // namespace master {
 } // namespace mesos {