You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2016/02/28 18:55:27 UTC

[09/10] mesos git commit: Added support for specifying detector to the callback interface.

Added support for specifying detector to the callback interface.

This change adds support for passing in a master detector object to the callback
interface. This can be used for testing master failover scenarios similar to how
the driver already does it.

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


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

Branch: refs/heads/master
Commit: 820a54b8f5fb970463acd34062744a12037eb5bd
Parents: 306cbf5
Author: Anand Mazumdar <ma...@gmail.com>
Authored: Sun Feb 28 09:53:18 2016 -0800
Committer: Vinod Kone <vi...@gmail.com>
Committed: Sun Feb 28 09:53:18 2016 -0800

----------------------------------------------------------------------
 include/mesos/v1/scheduler.hpp | 17 +++++++++++++++++
 src/scheduler/scheduler.cpp    | 35 +++++++++++++++++++++++++----------
 src/tests/mesos.hpp            |  6 ++++--
 3 files changed, 46 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/820a54b8/include/mesos/v1/scheduler.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/v1/scheduler.hpp b/include/mesos/v1/scheduler.hpp
index 5e462c1..a0fb73b 100644
--- a/include/mesos/v1/scheduler.hpp
+++ b/include/mesos/v1/scheduler.hpp
@@ -18,6 +18,7 @@
 #define __MESOS_V1_SCHEDULER_HPP__
 
 #include <functional>
+#include <memory>
 #include <queue>
 #include <string>
 
@@ -28,6 +29,12 @@
 #include <mesos/v1/scheduler/scheduler.hpp>
 
 namespace mesos {
+
+// Forward declaration.
+namespace internal {
+class MasterDetector;
+} // namespace internal {
+
 namespace v1 {
 namespace scheduler {
 
@@ -66,6 +73,16 @@ public:
   // disconnected).
   virtual void send(const Call& call);
 
+protected:
+  // NOTE: This constructor is used for testing.
+  Mesos(
+      const std::string& master,
+      ContentType contentType,
+      const std::function<void()>& connected,
+      const std::function<void()>& disconnected,
+      const std::function<void(const std::queue<Event>&)>& received,
+      const Option<std::shared_ptr<mesos::internal::MasterDetector>>& detector);
+
 private:
   MesosProcess* process;
 };

http://git-wip-us.apache.org/repos/asf/mesos/blob/820a54b8/src/scheduler/scheduler.cpp
----------------------------------------------------------------------
diff --git a/src/scheduler/scheduler.cpp b/src/scheduler/scheduler.cpp
index 83531c3..7ea1c25 100644
--- a/src/scheduler/scheduler.cpp
+++ b/src/scheduler/scheduler.cpp
@@ -126,7 +126,8 @@ public:
       ContentType _contentType,
       const lambda::function<void()>& connected,
       const lambda::function<void()>& disconnected,
-      const lambda::function<void(const queue<Event>&)>& received)
+      const lambda::function<void(const queue<Event>&)>& received,
+      const Option<shared_ptr<MasterDetector>>& _detector)
     : ProcessBase(ID::generate("scheduler")),
       state(DISCONNECTED),
       contentType(_contentType),
@@ -177,15 +178,18 @@ public:
       local = true;
     }
 
-    Try<MasterDetector*> create =
-      MasterDetector::create(pid.isSome() ? string(pid.get()) : master);
+    if (_detector.isNone()) {
+      Try<MasterDetector*> create =
+        MasterDetector::create(pid.isSome() ? string(pid.get()) : master);
 
-    if (create.isError()) {
-      EXIT(1) << "Failed to create a master detector: " << create.error();
-    }
+      if (create.isError()) {
+        EXIT(1) << "Failed to create a master detector: " << create.error();
+      }
 
-    // Save the detector.
-    detector.reset(create.get());
+      detector.reset(create.get());
+    } else {
+      detector = _detector.get();
+    }
   }
 
   virtual ~MesosProcess()
@@ -673,19 +677,30 @@ Mesos::Mesos(
     ContentType contentType,
     const lambda::function<void()>& connected,
     const lambda::function<void()>& disconnected,
-    const lambda::function<void(const queue<Event>&)>& received)
+    const lambda::function<void(const queue<Event>&)>& received,
+    const Option<shared_ptr<MasterDetector>>& detector)
 {
   process = new MesosProcess(
       master,
       contentType,
       connected,
       disconnected,
-      received);
+      received,
+      detector);
 
   spawn(process);
 }
 
 
+Mesos::Mesos(
+    const string& master,
+    ContentType contentType,
+    const lambda::function<void()>& connected,
+    const lambda::function<void()>& disconnected,
+    const lambda::function<void(const queue<Event>&)>& received)
+  : Mesos(master, contentType, connected, disconnected, received, None()) {}
+
+
 Mesos::~Mesos()
 {
   terminate(process);

http://git-wip-us.apache.org/repos/asf/mesos/blob/820a54b8/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index e6bd50e..0c55d59 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -950,7 +950,8 @@ public:
   TestMesos(
       const std::string& master,
       ContentType contentType,
-      const std::shared_ptr<MockHTTPScheduler<Mesos, Event>>& _scheduler)
+      const std::shared_ptr<MockHTTPScheduler<Mesos, Event>>& _scheduler,
+      const Option<std::shared_ptr<MasterDetector>>& detector = None())
     : Mesos(
         master,
         contentType,
@@ -962,7 +963,8 @@ public:
                      this),
         lambda::bind(&TestMesos<Mesos, Event>::events,
                      this,
-                     lambda::_1)),
+                     lambda::_1),
+        detector),
       scheduler(_scheduler) {}
 
 protected: