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 <[email protected]> Authored: Tue Jun 23 17:00:36 2015 -0700 Committer: Benjamin Mahler <[email protected]> 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) {
