You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2015/07/17 01:30:45 UTC

[1/6] mesos git commit: Implemented the ERROR Event handler in the scheduler driver.

Repository: mesos
Updated Branches:
  refs/heads/master 6bd625748 -> 01f6f7b31


Implemented the ERROR Event handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: 0e745fe2b1a3c70fb3d23682c8fdb3acc553efbe
Parents: d52da5d
Author: Benjamin Mahler <be...@gmail.com>
Authored: Mon Jun 22 16:17:19 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:43 2015 -0700

----------------------------------------------------------------------
 src/Makefile.am                          |  1 +
 src/sched/sched.cpp                      |  2 +-
 src/tests/scheduler_event_call_tests.cpp | 94 +++++++++++++++++++++++++++
 3 files changed, 96 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0e745fe2/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index e5b5d36..e2cbd15 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1517,6 +1517,7 @@ mesos_tests_SOURCES =				\
   tests/resource_offers_tests.cpp		\
   tests/resources_tests.cpp			\
   tests/scheduler_tests.cpp			\
+  tests/scheduler_event_call_tests.cpp		\
   tests/script.cpp				\
   tests/slave_recovery_tests.cpp		\
   tests/slave_tests.cpp				\

http://git-wip-us.apache.org/repos/asf/mesos/blob/0e745fe2/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index cd80f29..3dc8a58 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -507,7 +507,7 @@ protected:
           break;
         }
 
-        drop(event, "Unimplemented");
+        error(event.error().message());
         break;
       }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/0e745fe2/src/tests/scheduler_event_call_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_event_call_tests.cpp b/src/tests/scheduler_event_call_tests.cpp
new file mode 100644
index 0000000..d352fb4
--- /dev/null
+++ b/src/tests/scheduler_event_call_tests.cpp
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gmock/gmock.h>
+
+#include <mesos/scheduler.hpp>
+
+#include <process/future.hpp>
+#include <process/gmock.hpp>
+#include <process/gtest.hpp>
+#include <process/message.hpp>
+#include <process/pid.hpp>
+
+#include <stout/nothing.hpp>
+#include <stout/try.hpp>
+
+#include "master/master.hpp"
+
+#include "tests/containerizer.hpp"
+#include "tests/mesos.hpp"
+
+using mesos::internal::master::Master;
+
+using mesos::scheduler::Event;
+
+using process::Future;
+using process::Message;
+using process::PID;
+using process::UPID;
+
+using testing::_;
+using testing::Eq;
+
+namespace mesos {
+namespace internal {
+namespace tests {
+
+
+// These tests intercept master messages and manually
+// post Event messages to the driver.
+class SchedulerDriverEventTest : public MesosTest {};
+
+
+// Ensures that the driver can handle the ERROR event.
+TEST_F(SchedulerDriverEventTest, Error)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<Message> frameworkRegisteredMessage =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
+
+  driver.start();
+
+  AWAIT_READY(frameworkRegisteredMessage);
+  UPID frameworkPid = frameworkRegisteredMessage.get().to;
+
+  Event event;
+  event.set_type(Event::ERROR);
+  event.mutable_error()->set_message("error message");
+
+  Future<Nothing> error;
+  EXPECT_CALL(sched, error(&driver, event.error().message()))
+    .WillOnce(FutureSatisfy(&error));
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(error);
+}
+
+} // namespace tests {
+} // namespace internal {
+} // namespace mesos {


[3/6] mesos git commit: Implemented the RESCIND Event handler in the scheduler driver.

Posted by bm...@apache.org.
Implemented the RESCIND Event handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: 3f44d69c7c9646d604fa4741701183e22d30d0a3
Parents: ae6ccdf
Author: Benjamin Mahler <be...@gmail.com>
Authored: Tue Jun 23 17:26:56 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:44 2015 -0700

----------------------------------------------------------------------
 src/sched/sched.cpp                      |  4 +++-
 src/tests/scheduler_event_call_tests.cpp | 34 +++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/3f44d69c/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index c2dbd7f..0265a44 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -466,7 +466,9 @@ protected:
           break;
         }
 
-        drop(event, "Unimplemented");
+        // TODO(bmahler): Rename 'rescindOffer' to 'rescind'
+        // to match the Event naming scheme.
+        rescindOffer(from, event.rescind().offer_id());
         break;
       }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/3f44d69c/src/tests/scheduler_event_call_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_event_call_tests.cpp b/src/tests/scheduler_event_call_tests.cpp
index 33e8f0e..a24b13e 100644
--- a/src/tests/scheduler_event_call_tests.cpp
+++ b/src/tests/scheduler_event_call_tests.cpp
@@ -56,6 +56,40 @@ namespace tests {
 class SchedulerDriverEventTest : public MesosTest {};
 
 
+// Ensures that the driver can handle the RESCIND event.
+TEST_F(SchedulerDriverEventTest, Rescind)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<Message> frameworkRegisteredMessage =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
+
+  driver.start();
+
+  AWAIT_READY(frameworkRegisteredMessage);
+  UPID frameworkPid = frameworkRegisteredMessage.get().to;
+
+  Event event;
+  event.set_type(Event::RESCIND);
+  event.mutable_rescind()->mutable_offer_id()->set_value("O");
+
+  Future<Nothing> offerRescinded;
+  EXPECT_CALL(sched, offerRescinded(&driver, event.rescind().offer_id()))
+    .WillOnce(FutureSatisfy(&offerRescinded));
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(offerRescinded);
+}
+
+
 // Ensures that the driver can handle the MESSAGE event.
 TEST_F(SchedulerDriverEventTest, Message)
 {


[4/6] mesos git commit: Implemented the FAILURE Event handler in the scheduler driver.

Posted by bm...@apache.org.
Implemented the FAILURE Event handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: 1317938e9335ca85b23efec491dd9a0876a210de
Parents: 3f44d69
Author: Benjamin Mahler <be...@gmail.com>
Authored: Wed Jul 8 12:07:25 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:44 2015 -0700

----------------------------------------------------------------------
 src/sched/sched.cpp                      | 16 +++++++++-
 src/tests/scheduler_event_call_tests.cpp | 45 +++++++++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1317938e/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index 0265a44..fa005c6 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -503,7 +503,21 @@ protected:
           break;
         }
 
-        drop(event, "Unimplemented");
+        // TODO(bmahler): Add a 'failure' method and have the
+        // lost slave handler call into it.
+
+        if (event.failure().has_slave_id() &&
+            event.failure().has_executor_id()) {
+          // NOTE: We silently drop executor FAILURE messages
+          // because this matches the existing behavior of the
+          // scheduler driver: there is currently no install
+          // handler for ExitedExecutorMessage.
+        } else if (event.failure().has_slave_id()) {
+          lostSlave(from, event.failure().slave_id());
+        } else {
+          drop(event, "Expecting 'slave_id' to be present");
+        }
+
         break;
       }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/1317938e/src/tests/scheduler_event_call_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_event_call_tests.cpp b/src/tests/scheduler_event_call_tests.cpp
index a24b13e..7bb4df2 100644
--- a/src/tests/scheduler_event_call_tests.cpp
+++ b/src/tests/scheduler_event_call_tests.cpp
@@ -130,6 +130,51 @@ TEST_F(SchedulerDriverEventTest, Message)
 }
 
 
+// Ensures that the driver can handle the FAILURE event.
+TEST_F(SchedulerDriverEventTest, Failure)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<Message> frameworkRegisteredMessage =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
+
+  driver.start();
+
+  AWAIT_READY(frameworkRegisteredMessage);
+  UPID frameworkPid = frameworkRegisteredMessage.get().to;
+
+  // Send a failure for an executor, this should be dropped
+  // to match the existing behavior of the scheduler driver.
+  SlaveID slaveId;
+  slaveId.set_value("S");
+
+  Event event;
+  event.set_type(Event::FAILURE);
+  event.mutable_failure()->mutable_slave_id()->CopyFrom(slaveId);
+  event.mutable_failure()->mutable_executor_id()->set_value("E");
+
+  process::post(master.get(), frameworkPid, event);
+
+  // Now, post a failure for a slave and expect a 'slaveLost'.
+  event.mutable_failure()->clear_executor_id();
+
+  Future<Nothing> slaveLost;
+  EXPECT_CALL(sched, slaveLost(&driver, slaveId))
+    .WillOnce(FutureSatisfy(&slaveLost));
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(slaveLost);
+}
+
+
 // Ensures that the driver can handle the ERROR event.
 TEST_F(SchedulerDriverEventTest, Error)
 {


[2/6] mesos git commit: Added a stub Event message handler in the scheduler driver.

Posted by bm...@apache.org.
Added a stub Event message handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: d52da5d0b047412c93323d764b0d2183ddb99dfb
Parents: 6bd6257
Author: Benjamin Mahler <be...@gmail.com>
Authored: Tue Jul 14 17:57:02 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:43 2015 -0700

----------------------------------------------------------------------
 src/sched/sched.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 99 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/d52da5d0/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index e372a15..cd80f29 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -93,7 +93,12 @@ using namespace mesos::internal;
 using namespace mesos::internal::master;
 using namespace mesos::scheduler;
 
-using namespace process;
+using process::Clock;
+using process::DispatchEvent;
+using process::Future;
+using process::MessageEvent;
+using process::Process;
+using process::UPID;
 
 using std::map;
 using std::string;
@@ -165,6 +170,8 @@ public:
 protected:
   virtual void initialize()
   {
+    install<Event>(&SchedulerProcess::receive);
+
     // TODO(benh): Get access to flags so that we can decide whether
     // or not to make ZooKeeper verbose.
     install<FrameworkRegisteredMessage>(
@@ -420,6 +427,97 @@ protected:
     }
   }
 
+  void drop(const Event& event, const string& message)
+  {
+    // TODO(bmahler): Increment a metric.
+
+    // NOTE: The << operator for 'event.type()' from
+    // type_utils.hpp does not resolve here.
+    LOG(WARNING) << "Dropping "
+                 << mesos::scheduler::Event_Type_Name(event.type())
+                 << ": " << message;
+  }
+
+  void receive(const UPID& from, const Event& event)
+  {
+    switch (event.type()) {
+      case Event::SUBSCRIBED: {
+        if (!event.has_subscribed()) {
+          drop(event, "Expecting 'subscribed' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::OFFERS: {
+        if (!event.has_offers()) {
+          drop(event, "Expecting 'offers' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::RESCIND: {
+        if (!event.has_rescind()) {
+          drop(event, "Expecting 'rescind' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::UPDATE: {
+        if (!event.has_update()) {
+          drop(event, "Expecting 'update' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::MESSAGE: {
+        if (!event.has_message()) {
+          drop(event, "Expecting 'message' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::FAILURE: {
+        if (!event.has_failure()) {
+          drop(event, "Expecting 'failure' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      case Event::ERROR: {
+        if (!event.has_error()) {
+          drop(event, "Expecting 'error' to be present");
+          break;
+        }
+
+        drop(event, "Unimplemented");
+        break;
+      }
+
+      default: {
+        drop(event, "Unknown event");
+        break;
+      }
+    }
+  }
+
   void registered(
       const UPID& from,
       const FrameworkID& frameworkId,


[5/6] mesos git commit: Implemented the UPDATE Event handler in the scheduler driver.

Posted by bm...@apache.org.
Implemented the UPDATE Event handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: 01f6f7b318605a96d42acddf71f1693b3a532483
Parents: 1317938
Author: Benjamin Mahler <be...@gmail.com>
Authored: Fri Jul 10 15:13:14 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:44 2015 -0700

----------------------------------------------------------------------
 include/mesos/type_utils.hpp             |  3 ++
 src/common/type_utils.cpp                |  1 +
 src/sched/sched.cpp                      | 32 ++++++++++--
 src/tests/scheduler_event_call_tests.cpp | 72 +++++++++++++++++++++++++++
 4 files changed, 105 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/01f6f7b3/include/mesos/type_utils.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/type_utils.hpp b/include/mesos/type_utils.hpp
index e7bfe8c..eb7fe25 100644
--- a/include/mesos/type_utils.hpp
+++ b/include/mesos/type_utils.hpp
@@ -61,6 +61,9 @@ bool operator == (const SlaveInfo& left, const SlaveInfo& right);
 bool operator == (const Volume& left, const Volume& right);
 
 
+bool operator == (const TaskStatus& left, const TaskStatus& right);
+bool operator != (const TaskStatus& left, const TaskStatus& right);
+
 inline bool operator == (const ContainerID& left, const ContainerID& right)
 {
   return left.value() == right.value();

http://git-wip-us.apache.org/repos/asf/mesos/blob/01f6f7b3/src/common/type_utils.cpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp
index 19f79b4..2ad5b4c 100644
--- a/src/common/type_utils.cpp
+++ b/src/common/type_utils.cpp
@@ -334,6 +334,7 @@ bool operator == (const SlaveInfo& left, const SlaveInfo& right)
 }
 
 
+// TODO(bmahler): Use SerializeToString here?
 bool operator == (const TaskStatus& left, const TaskStatus& right)
 {
   return left.task_id() == right.task_id() &&

http://git-wip-us.apache.org/repos/asf/mesos/blob/01f6f7b3/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index fa005c6..839fcbf 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -478,7 +478,33 @@ protected:
           break;
         }
 
-        drop(event, "Unimplemented");
+        const TaskStatus& status = event.update().status();
+
+        // Create a StatusUpdate based on the TaskStatus.
+        StatusUpdate update;
+        update.mutable_framework_id()->CopyFrom(framework.id());
+        update.mutable_status()->CopyFrom(status);
+        update.set_timestamp(status.timestamp());
+
+        if (status.has_executor_id()) {
+          update.mutable_executor_id()->CopyFrom(status.executor_id());
+        }
+
+        if (status.has_slave_id()) {
+          update.mutable_slave_id()->CopyFrom(status.slave_id());
+        }
+
+        if (status.has_uuid()) {
+          update.set_uuid(status.uuid());
+        }
+
+        // Note that we do not need to set the 'pid' now that
+        // the driver uses 'uuid' absence to skip acknowledgement.
+        //
+        // TODO(bmahler): Implement an 'update' method to match
+        // the Event naming scheme, and have 'statusUpdate' call
+        // into it.
+        statusUpdate(from, update, UPID());
         break;
       }
 
@@ -848,8 +874,8 @@ protected:
       }
 
       // See above for when we don't need to acknowledge.
-      if (update.has_uuid() && update.uuid() != "" &&
-          from != UPID() && pid != UPID()) {
+      if ((update.has_uuid() && update.uuid() != "") ||
+          (from != UPID() && pid != UPID())) {
         // We drop updates while we're disconnected.
         CHECK(connected);
         CHECK_SOME(master);

http://git-wip-us.apache.org/repos/asf/mesos/blob/01f6f7b3/src/tests/scheduler_event_call_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_event_call_tests.cpp b/src/tests/scheduler_event_call_tests.cpp
index 7bb4df2..cf6aa19 100644
--- a/src/tests/scheduler_event_call_tests.cpp
+++ b/src/tests/scheduler_event_call_tests.cpp
@@ -90,6 +90,78 @@ TEST_F(SchedulerDriverEventTest, Rescind)
 }
 
 
+// Ensures the scheduler driver can handle the UPDATE event.
+TEST_F(SchedulerDriverEventTest, Update)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<Message> frameworkRegisteredMessage =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
+
+  driver.start();
+
+  AWAIT_READY(frameworkRegisteredMessage);
+  UPID frameworkPid = frameworkRegisteredMessage.get().to;
+
+  FrameworkRegisteredMessage message;
+  ASSERT_TRUE(message.ParseFromString(frameworkRegisteredMessage.get().body));
+
+  FrameworkID frameworkId = message.framework_id();
+
+  SlaveID slaveId;
+  slaveId.set_value("S");
+
+  TaskID taskId;
+  taskId.set_value("T");
+
+  ExecutorID executorId;
+  executorId.set_value("E");
+
+  // Generate an update that needs no acknowledgement.
+  Event event;
+  event.set_type(Event::UPDATE);
+  event.mutable_update()->mutable_status()->CopyFrom(
+      protobuf::createStatusUpdate(
+          frameworkId,
+          slaveId,
+          taskId,
+          TASK_RUNNING,
+          TaskStatus::SOURCE_MASTER,
+          None(),
+          "message",
+          None(),
+          executorId).status());
+
+  Future<Nothing> statusUpdate;
+  Future<Nothing> statusUpdate2;
+  EXPECT_CALL(sched, statusUpdate(&driver, event.update().status()))
+    .WillOnce(FutureSatisfy(&statusUpdate))
+    .WillOnce(FutureSatisfy(&statusUpdate2));
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(statusUpdate);
+
+  // Generate an update that requires acknowledgement.
+  event.mutable_update()->mutable_status()->set_uuid(UUID::random().toBytes());
+
+  Future<StatusUpdateAcknowledgementMessage> statusUpdateAcknowledgement =
+    DROP_PROTOBUF(StatusUpdateAcknowledgementMessage(), _, _);
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(statusUpdate2);
+  AWAIT_READY(statusUpdateAcknowledgement);
+}
+
+
 // Ensures that the driver can handle the MESSAGE event.
 TEST_F(SchedulerDriverEventTest, Message)
 {


[6/6] mesos git commit: Implemented the MESSAGE Event handler in the scheduler driver.

Posted by bm...@apache.org.
Implemented the MESSAGE Event handler in the scheduler driver.

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


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

Branch: refs/heads/master
Commit: ae6ccdfeb0175391c55e63152438e630f50b22a2
Parents: 0e745fe
Author: Benjamin Mahler <be...@gmail.com>
Authored: Tue Jun 23 17:00:36 2015 -0700
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Thu Jul 16 16:11:44 2015 -0700

----------------------------------------------------------------------
 src/sched/sched.cpp                      | 16 +++++++----
 src/tests/scheduler_event_call_tests.cpp | 40 +++++++++++++++++++++++++++
 2 files changed, 50 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/ae6ccdfe/src/sched/sched.cpp
----------------------------------------------------------------------
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index 3dc8a58..c2dbd7f 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -205,7 +205,6 @@ protected:
     install<ExecutorToFrameworkMessage>(
         &SchedulerProcess::frameworkMessage,
         &ExecutorToFrameworkMessage::slave_id,
-        &ExecutorToFrameworkMessage::framework_id,
         &ExecutorToFrameworkMessage::executor_id,
         &ExecutorToFrameworkMessage::data);
 
@@ -487,7 +486,12 @@ protected:
           break;
         }
 
-        drop(event, "Unimplemented");
+        // TODO(bmahler): Rename 'frameworkMessage' to 'message'
+        // to match the Event naming scheme.
+        frameworkMessage(
+            event.message().slave_id(),
+            event.message().executor_id(),
+            event.message().data());
         break;
       }
 
@@ -884,10 +888,10 @@ protected:
     VLOG(1) << "Scheduler::slaveLost took " << stopwatch.elapsed();
   }
 
-  void frameworkMessage(const SlaveID& slaveId,
-                        const FrameworkID& frameworkId,
-                        const ExecutorID& executorId,
-                        const string& data)
+  void frameworkMessage(
+      const SlaveID& slaveId,
+      const ExecutorID& executorId,
+      const string& data)
   {
     if (!running) {
       VLOG(1)

http://git-wip-us.apache.org/repos/asf/mesos/blob/ae6ccdfe/src/tests/scheduler_event_call_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_event_call_tests.cpp b/src/tests/scheduler_event_call_tests.cpp
index d352fb4..33e8f0e 100644
--- a/src/tests/scheduler_event_call_tests.cpp
+++ b/src/tests/scheduler_event_call_tests.cpp
@@ -56,6 +56,46 @@ namespace tests {
 class SchedulerDriverEventTest : public MesosTest {};
 
 
+// Ensures that the driver can handle the MESSAGE event.
+TEST_F(SchedulerDriverEventTest, Message)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<Message> frameworkRegisteredMessage =
+    FUTURE_MESSAGE(Eq(FrameworkRegisteredMessage().GetTypeName()), _, _);
+
+  driver.start();
+
+  AWAIT_READY(frameworkRegisteredMessage);
+  UPID frameworkPid = frameworkRegisteredMessage.get().to;
+
+  Event event;
+  event.set_type(Event::MESSAGE);
+  event.mutable_message()->mutable_slave_id()->set_value("S");
+  event.mutable_message()->mutable_executor_id()->set_value("E");
+  event.mutable_message()->set_data("data");
+
+  Future<Nothing> frameworkMessage;
+  EXPECT_CALL(sched, frameworkMessage(
+      &driver,
+      event.message().executor_id(),
+      event.message().slave_id(),
+      event.message().data()))
+    .WillOnce(FutureSatisfy(&frameworkMessage));
+
+  process::post(master.get(), frameworkPid, event);
+
+  AWAIT_READY(frameworkMessage);
+}
+
+
 // Ensures that the driver can handle the ERROR event.
 TEST_F(SchedulerDriverEventTest, Error)
 {