Repository: mesos Updated Branches: refs/heads/master ab1cf84e7 -> d5974c0a7
Added a test for sending pending tasks during re-registration. Review: https://reviews.apache.org/r/25373 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d5974c0a Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d5974c0a Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d5974c0a Branch: refs/heads/master Commit: d5974c0a7ea79cf5f4812272dd8dd58dcc0014f1 Parents: 1071d3e Author: Benjamin Mahler <[email protected]> Authored: Thu Sep 4 10:24:17 2014 -0700 Committer: Benjamin Mahler <[email protected]> Committed: Wed Sep 10 11:05:35 2014 -0700 ---------------------------------------------------------------------- src/tests/fault_tolerance_tests.cpp | 69 ++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/d5974c0a/src/tests/fault_tolerance_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/fault_tolerance_tests.cpp b/src/tests/fault_tolerance_tests.cpp index 6689420..80d7fcf 100644 --- a/src/tests/fault_tolerance_tests.cpp +++ b/src/tests/fault_tolerance_tests.cpp @@ -2219,6 +2219,75 @@ TEST_F(FaultToleranceTest, ReconcileLostTasks) } +// This test verifies that the slave reports pending tasks when +// re-registering, otherwise the master will report them as being +// lost. +TEST_F(FaultToleranceTest, ReconcilePendingTasks) +{ + Try<PID<Master> > master = StartMaster(); + ASSERT_SOME(master); + + StandaloneMasterDetector detector(master.get()); + + Try<PID<Slave> > slave = StartSlave(&detector); + ASSERT_SOME(slave); + + MockScheduler sched; + MesosSchedulerDriver driver( + &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL); + + EXPECT_CALL(sched, registered(&driver, _, _)); + + Future<vector<Offer> > offers; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers)) + .WillRepeatedly(Return()); // Ignore subsequent offers. + + driver.start(); + + AWAIT_READY(offers); + EXPECT_NE(0u, offers.get().size()); + + // No TASK_LOST updates should occur! + EXPECT_CALL(sched, statusUpdate(&driver, _)) + .Times(0); + + // We drop the _runTask dispatch to ensure the task remains + // pending in the slave. + DROP_DISPATCH(slave.get(), &Slave::_runTask); + + TaskInfo task1; + task1.set_name("test task"); + task1.mutable_task_id()->set_value("1"); + task1.mutable_slave_id()->MergeFrom(offers.get()[0].slave_id()); + task1.mutable_resources()->MergeFrom(offers.get()[0].resources()); + task1.mutable_executor()->MergeFrom(DEFAULT_EXECUTOR_INFO); + + vector<TaskInfo> tasks1; + tasks1.push_back(task1); + + driver.launchTasks(offers.get()[0].id(), tasks1); + + Future<SlaveReregisteredMessage> slaveReregisteredMessage = + FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _); + + // Simulate a spurious master change event (e.g., due to ZooKeeper + // expiration) at the slave to force re-registration. + detector.appoint(master.get()); + + AWAIT_READY(slaveReregisteredMessage); + + Clock::pause(); + Clock::settle(); + Clock::resume(); + + driver.stop(); + driver.join(); + + Shutdown(); +} + + // This test verifies that when the slave re-registers, the master // does not send TASK_LOST update for a task that has reached terminal // state but is waiting for an acknowledgement.
