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:48 UTC

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

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)
 {