The commit is different from the diff I tested and had for review. I'm not sure why it was applied differently - Vinod?
Ian On Aug 27, 2013, at 12:44 PM, Benjamin Mahler <[email protected]> wrote: > +vinod, ian > > This appears to have broken the build. > > > On Tue, Aug 27, 2013 at 10:37 AM, <[email protected]> wrote: > Updated Branches: > refs/heads/master eb1cd4a7c -> 400a88f98 > > > Added resource checks to slave recovery tests to ensure resources > are re-offered after restarts. > > From: Ian Downes <[email protected]> > Review: https://reviews.apache.org/r/13764 > > > Project: http://git-wip-us.apache.org/repos/asf/mesos/repo > Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/400a88f9 > Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/400a88f9 > Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/400a88f9 > > Branch: refs/heads/master > Commit: 400a88f9817bb102522b08b83dca400380ad8a9b > Parents: eb1cd4a > Author: Vinod Kone <[email protected]> > Authored: Tue Aug 27 13:36:42 2013 -0400 > Committer: Vinod Kone <[email protected]> > Committed: Tue Aug 27 13:37:05 2013 -0400 > > ---------------------------------------------------------------------- > src/tests/slave_recovery_tests.cpp | 135 ++++++++++++++++++++++---------- > 1 file changed, 94 insertions(+), 41 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/mesos/blob/400a88f9/src/tests/slave_recovery_tests.cpp > ---------------------------------------------------------------------- > diff --git a/src/tests/slave_recovery_tests.cpp > b/src/tests/slave_recovery_tests.cpp > index 57636c1..78f42ff 100644 > --- a/src/tests/slave_recovery_tests.cpp > +++ b/src/tests/slave_recovery_tests.cpp > @@ -524,17 +524,16 @@ TYPED_TEST(SlaveRecoveryTest, > RecoverUnregisteredExecutor) > > EXPECT_CALL(sched, registered(_, _, _)); > > - Future<vector<Offer> > offers; > + Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)) > - .WillRepeatedly(Return()); // Ignore subsequent offers. > + .WillOnce(FutureArg<1>(&offers1)); > > driver.start(); > > - AWAIT_READY(offers); > - EXPECT_NE(0u, offers.get().size()); > + AWAIT_READY(offers1); > + EXPECT_NE(0u, offers1.get().size()); > > - TaskInfo task = createTask(offers.get()[0], "sleep 1000"); > + TaskInfo task = createTask(offers1.get()[0], "sleep 1000"); > vector<TaskInfo> tasks; > tasks.push_back(task); // Long-running task. > > @@ -542,7 +541,7 @@ TYPED_TEST(SlaveRecoveryTest, RecoverUnregisteredExecutor) > Future<Message> registerExecutor = > DROP_MESSAGE(Eq(RegisterExecutorMessage().GetTypeName()), _, _); > > - driver.launchTasks(offers.get()[0].id(), tasks); > + driver.launchTasks(offers1.get()[0].id(), tasks); > > // Stop the slave before the executor is registered. > AWAIT_READY(registerExecutor); > @@ -560,6 +559,11 @@ TYPED_TEST(SlaveRecoveryTest, > RecoverUnregisteredExecutor) > // Restart the slave (use same flags) with a new isolator. > TypeParam isolator2; > > + Future<vector<Offer> > offers2; > + EXPECT_CALL(sched, resourceOffers(_, _)) > + .WillOnce(FutureArg<1>(&offers2)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > + > slave = this->StartSlave(&isolator2, flags); > ASSERT_SOME(slave); > > @@ -583,6 +587,11 @@ TYPED_TEST(SlaveRecoveryTest, > RecoverUnregisteredExecutor) > > Clock::resume(); > > + // Master should subsequently reoffer the same resources. > + AWAIT_READY(offers2); > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > + > driver.stop(); > driver.join(); > > @@ -617,17 +626,16 @@ TYPED_TEST(SlaveRecoveryTest, RecoverTerminatedExecutor) > > EXPECT_CALL(sched, registered(_, _, _)); > > - Future<vector<Offer> > offers; > + Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)) > - .WillRepeatedly(Return()); // Ignore subsequent offers. > + .WillOnce(FutureArg<1>(&offers1)); > > driver.start(); > > - AWAIT_READY(offers); > - EXPECT_NE(0u, offers.get().size()); > + AWAIT_READY(offers1); > + EXPECT_NE(0u, offers1.get().size()); > > - TaskInfo task = createTask(offers.get()[0], "sleep 1000"); > + TaskInfo task = createTask(offers1.get()[0], "sleep 1000"); > vector<TaskInfo> tasks; > tasks.push_back(task); // Long-running task. > > @@ -639,7 +647,7 @@ TYPED_TEST(SlaveRecoveryTest, RecoverTerminatedExecutor) > Future<Nothing> ack = > FUTURE_DISPATCH(_, &Slave::_statusUpdateAcknowledgement); > > - driver.launchTasks(offers.get()[0].id(), tasks); > + driver.launchTasks(offers1.get()[0].id(), tasks); > > // Capture the executor pid. > AWAIT_READY(registerExecutor); > @@ -662,6 +670,11 @@ TYPED_TEST(SlaveRecoveryTest, RecoverTerminatedExecutor) > // Restart the slave (use same flags) with a new isolator. > TypeParam isolator2; > > + Future<vector<Offer> > offers2; > + EXPECT_CALL(sched, resourceOffers(_, _)) > + .WillOnce(FutureArg<1>(&offers2)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > + > slave = this->StartSlave(&isolator2, flags); > ASSERT_SOME(slave); > > @@ -683,6 +696,13 @@ TYPED_TEST(SlaveRecoveryTest, RecoverTerminatedExecutor) > AWAIT_READY(status); > ASSERT_EQ(TASK_FAILED, status.get().state()); > > + Clock::resume(); > + > + // Master should subsequently reoffer the same resources. > + AWAIT_READY(offers2); > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > + > driver.stop(); > driver.join(); > > @@ -810,17 +830,17 @@ TYPED_TEST(SlaveRecoveryTest, RecoverCompletedExecutor) > > EXPECT_CALL(sched, registered(_, _, _)); > > - Future<vector<Offer> > offers; > + Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)) > - .WillRepeatedly(Return()); // Ignore subsequent offers. > + .WillOnce(FutureArg<1>(&offers1)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > > driver.start(); > > - AWAIT_READY(offers); > - EXPECT_NE(0u, offers.get().size()); > + AWAIT_READY(offers1); > + EXPECT_NE(0u, offers1.get().size()); > > - TaskInfo task = createTask(offers.get()[0], "exit 0"); > + TaskInfo task = createTask(offers1.get()[0], "exit 0"); > vector<TaskInfo> tasks; > tasks.push_back(task); // Short-lived task. > > @@ -833,7 +853,7 @@ TYPED_TEST(SlaveRecoveryTest, RecoverCompletedExecutor) > Future<Nothing> schedule = FUTURE_DISPATCH( > _, &GarbageCollectorProcess::schedule); > > - driver.launchTasks(offers.get()[0].id(), tasks); > + driver.launchTasks(offers1.get()[0].id(), tasks); > > // We use 'gc.schedule' as a proxy for the cleanup of the executor. > AWAIT_READY(schedule); > @@ -846,12 +866,22 @@ TYPED_TEST(SlaveRecoveryTest, RecoverCompletedExecutor) > // Restart the slave (use same flags) with a new isolator. > TypeParam isolator2; > > + Future<vector<Offer> > offers2; > + EXPECT_CALL(sched, resourceOffers(_, _)) > + .WillOnce(FutureArg<1>(&offers2)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > + > slave = this->StartSlave(&isolator2, flags); > ASSERT_SOME(slave); > > // We use 'gc.schedule' as a proxy for the cleanup of the executor. > AWAIT_READY(schedule2); > > + // Make sure all slave resources are reoffered. > + AWAIT_READY(offers2); > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > + > driver.stop(); > driver.join(); > > @@ -887,7 +917,8 @@ TYPED_TEST(SlaveRecoveryTest, CleanupExecutor) > > Future<vector<Offer> > offers; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)); > + .WillOnce(FutureArg<1>(&offers)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > > driver.start(); > > @@ -1199,7 +1230,8 @@ TYPED_TEST(SlaveRecoveryTest, KillTask) > > Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers1)); > + .WillOnce(FutureArg<1>(&offers1)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > > driver.start(); > > @@ -1230,6 +1262,11 @@ TYPED_TEST(SlaveRecoveryTest, KillTask) > // Restart the slave (use same flags) with a new isolator. > TypeParam isolator2; > > + Future<vector<Offer> > offers2; > + EXPECT_CALL(sched, resourceOffers(_, _)) > + .WillOnce(FutureArg<1>(&offers2)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > + > slave = this->StartSlave(&isolator2, flags); > ASSERT_SOME(slave); > > @@ -1275,6 +1312,11 @@ TYPED_TEST(SlaveRecoveryTest, KillTask) > > Clock::resume(); > > + // Make sure all slave resources are reoffered. > + AWAIT_READY(offers2); > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > + > driver.stop(); > driver.join(); > > @@ -1310,23 +1352,22 @@ TYPED_TEST(SlaveRecoveryTest, GCExecutor) > > EXPECT_CALL(sched, registered(_, _, _)); > > - Future<vector<Offer> > offers; > + Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)) > - .WillRepeatedly(Return()); // Ignore subsequent offers. > + .WillOnce(FutureArg<1>(&offers1)); > > driver.start(); > > - AWAIT_READY(offers); > - EXPECT_NE(0u, offers.get().size()); > + AWAIT_READY(offers1); > + EXPECT_NE(0u, offers1.get().size()); > > - TaskInfo task = createTask(offers.get()[0], "sleep 1000"); > + TaskInfo task = createTask(offers1.get()[0], "sleep 1000"); > vector<TaskInfo> tasks; > tasks.push_back(task); // Long-running task > > // Capture the slave and framework ids. > - SlaveID slaveId = offers.get()[0].slave_id(); > - FrameworkID frameworkId = offers.get()[0].framework_id(); > + SlaveID slaveId = offers1.get()[0].slave_id(); > + FrameworkID frameworkId = offers1.get()[0].framework_id(); > > Future<Message> registerExecutorMessage = > FUTURE_MESSAGE(Eq(RegisterExecutorMessage().GetTypeName()), _, _); > @@ -1336,7 +1377,7 @@ TYPED_TEST(SlaveRecoveryTest, GCExecutor) > .WillOnce(FutureSatisfy(&status)) > .WillRepeatedly(Return()); // Ignore subsequent updates. > > - driver.launchTasks(offers.get()[0].id(), tasks); > + driver.launchTasks(offers1.get()[0].id(), tasks); > > // Capture the executor id and pid. > AWAIT_READY(registerExecutorMessage); > @@ -1503,6 +1544,9 @@ TYPED_TEST(SlaveRecoveryTest, ShutdownSlave) > AWAIT_READY(offers2); > > EXPECT_NE(0u, offers2.get().size()); > + // Make sure all slave resources are reoffered. > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > > // Ensure the slave id is different. > ASSERT_NE( > @@ -1643,30 +1687,29 @@ TYPED_TEST(SlaveRecoveryTest, ReconcileKillTask) > > EXPECT_CALL(sched, registered(_, _, _)); > > - Future<vector<Offer> > offers; > + Future<vector<Offer> > offers1; > EXPECT_CALL(sched, resourceOffers(_, _)) > - .WillOnce(FutureArg<1>(&offers)) > - .WillRepeatedly(Return()); // Ignore subsequent offers. > + .WillOnce(FutureArg<1>(&offers1)); > > driver.start(); > > - AWAIT_READY(offers); > - EXPECT_NE(0u, offers.get().size()); > + AWAIT_READY(offers1); > + EXPECT_NE(0u, offers1.get().size()); > > - TaskInfo task = createTask(offers.get()[0], "sleep 1000"); > + TaskInfo task = createTask(offers1.get()[0], "sleep 1000"); > vector<TaskInfo> tasks; > tasks.push_back(task); // Long-running task > > // Capture the slave and framework ids. > - SlaveID slaveId = offers.get()[0].slave_id(); > - FrameworkID frameworkId = offers.get()[0].framework_id(); > + SlaveID slaveId = offers1.get()[0].slave_id(); > + FrameworkID frameworkId = offers1.get()[0].framework_id(); > > EXPECT_CALL(sched, statusUpdate(_, _)); // TASK_RUNNING > > Future<Nothing> _statusUpdateAcknowledgement = > FUTURE_DISPATCH(_, &Slave::_statusUpdateAcknowledgement); > > - driver.launchTasks(offers.get()[0].id(), tasks); > + driver.launchTasks(offers1.get()[0].id(), tasks); > > // Wait for TASK_RUNNING update to be acknowledged. > AWAIT_READY(_statusUpdateAcknowledgement); > @@ -1684,6 +1727,11 @@ TYPED_TEST(SlaveRecoveryTest, ReconcileKillTask) > // Now restart the slave (use same flags) with a new isolator. > TypeParam isolator2; > > + Future<vector<Offer> > offers2; > + EXPECT_CALL(sched, resourceOffers(_, _)) > + .WillOnce(FutureArg<1>(&offers2)) > + .WillRepeatedly(Return()); // Ignore subsequent offers. > + > slave = this->StartSlave(&isolator2, flags); > ASSERT_SOME(slave); > > @@ -1691,6 +1739,11 @@ TYPED_TEST(SlaveRecoveryTest, ReconcileKillTask) > AWAIT_READY(status); > ASSERT_EQ(TASK_KILLED, status.get().state()); > > + // Make sure all slave resources are reoffered. > + AWAIT_READY(offers2); > + ASSERT_EQ(Resources(offers1.get()[0].resources()), > + Resources(offers2.get()[0].resources())); > + > driver.stop(); > driver.join(); > > >
