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 2017/03/01 21:27:52 UTC

mesos git commit: Fixed flakiness in three MULTI_ROLE related tests.

Repository: mesos
Updated Branches:
  refs/heads/master 3e6b4734a -> 0e8631667


Fixed flakiness in three MULTI_ROLE related tests.

Fixed flakiness in following tests:

MasterTest.MultiRoleSchedulerUpgrade
UpgradeTest.ReregisterOldAgentWithMultiRoleMaster
MasterTest.MultiRoleFrameworkReceivesOffers

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


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

Branch: refs/heads/master
Commit: 0e863166707f903a642f8f835937d267c493f2f5
Parents: 3e6b473
Author: Jay Guo <gu...@gmail.com>
Authored: Wed Mar 1 13:27:33 2017 -0800
Committer: Benjamin Mahler <bm...@apache.org>
Committed: Wed Mar 1 13:27:33 2017 -0800

----------------------------------------------------------------------
 src/tests/master_tests.cpp  | 56 +++++++++++++++++++++++-----------------
 src/tests/upgrade_tests.cpp | 12 ++++-----
 2 files changed, 39 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0e863166/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 357a9a4..db5197e 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -6527,23 +6527,18 @@ TEST_F(MasterTest, AgentRestartNoReregisterRateLimit)
 // receive two offers, one for each slave, allocated to different roles.
 TEST_F(MasterTest, MultiRoleFrameworkReceivesOffers)
 {
-  Try<Owned<cluster::Master>> master = StartMaster();
+  Clock::pause();
+
+  master::Flags masterFlags = CreateMasterFlags();
+  Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
   ASSERT_SOME(master);
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
-  MockExecutor exec(DEFAULT_EXECUTOR_ID);
-  TestContainerizer containerizer(&exec);
-
-  slave::Flags flags = CreateSlaveFlags();
-  Try<Owned<cluster::Slave>> slave1 =
-    StartSlave(detector.get(), &containerizer, flags);
+  // Start first agent.
+  Try<Owned<cluster::Slave>> slave1 = StartSlave(detector.get());
   ASSERT_SOME(slave1);
 
-  Try<Owned<cluster::Slave>> slave2 =
-    StartSlave(detector.get(), &containerizer, flags);
-  ASSERT_SOME(slave2);
-
   FrameworkInfo framework = DEFAULT_FRAMEWORK_INFO;
   framework.add_roles("role1");
   framework.add_roles("role2");
@@ -6558,27 +6553,41 @@ TEST_F(MasterTest, MultiRoleFrameworkReceivesOffers)
   EXPECT_CALL(sched, registered(&driver, _, _))
     .WillOnce(FutureSatisfy(&registered));
 
-  // Scheduler should receive two offers, one for each role.
-  Future<vector<Offer>> offers1;
-  Future<vector<Offer>> offers2;
-  EXPECT_CALL(sched, resourceOffers(&driver, _))
-    .WillOnce(FutureArg<1>(&offers1))
-    .WillOnce(FutureArg<1>(&offers2))
-    .WillRepeatedly(Return()); // Ignore subsequent offers.
-
   driver.start();
 
+  Clock::settle();
+
   AWAIT_READY(registered);
 
+  Future<vector<Offer>> offers1;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers1));
+
+  Clock::advance(masterFlags.allocation_interval);
+  Clock::settle();
+
   AWAIT_READY(offers1);
   EXPECT_NE(0u, offers1->size());
   EXPECT_TRUE(offers1.get()[0].has_allocation_info());
+
+  // Start second agent.
+  Try<Owned<cluster::Slave>> slave2 = StartSlave(detector.get());
+  ASSERT_SOME(slave2);
+
+  Future<vector<Offer>> offers2;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers2));
+
+  Clock::advance(masterFlags.allocation_interval);
+  Clock::settle();
+
   AWAIT_READY(offers2);
   EXPECT_NE(0u, offers2->size());
   EXPECT_TRUE(offers2.get()[0].has_allocation_info());
 
-  // 1st and 2nd offers should have different roles.
-  EXPECT_NE(
+  // We cannot deterministically expect roles for each offer, however we
+  // could assert that 1st and 2nd offers should have different roles.
+  ASSERT_NE(
       offers1.get()[0].allocation_info().role(),
       offers2.get()[0].allocation_info().role());
 
@@ -6663,8 +6672,6 @@ TEST_F(MasterTest, MultiRoleSchedulerUpgrade)
   // Scheduler1 should get an error due to failover.
   EXPECT_CALL(sched1, error(&driver1, "Framework failed over"));
 
-  EXPECT_CALL(exec, shutdown(_));
-
   driver2.start();
 
   AWAIT_READY(registered2);
@@ -6682,6 +6689,9 @@ TEST_F(MasterTest, MultiRoleSchedulerUpgrade)
   AWAIT_READY(status2);
   EXPECT_EQ(TASK_RUNNING, status2->state());
 
+  EXPECT_CALL(exec, shutdown(_))
+    .Times(AtMost(1));
+
   driver2.stop();
   driver2.join();
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/0e863166/src/tests/upgrade_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/upgrade_tests.cpp b/src/tests/upgrade_tests.cpp
index 99f56a0..6cdd6d9 100644
--- a/src/tests/upgrade_tests.cpp
+++ b/src/tests/upgrade_tests.cpp
@@ -142,6 +142,9 @@ TEST_F(UpgradeTest, ReregisterOldAgentWithMultiRoleMaster)
   EXPECT_CALL(exec, launchTask(_, _))
     .WillOnce(SendStatusUpdateFromTask(TASK_RUNNING));
 
+  EXPECT_CALL(exec, shutdown(_))
+    .Times(AtMost(1));
+
   AWAIT_READY(status);
   EXPECT_EQ(TASK_RUNNING, status.get().state());
 
@@ -149,17 +152,14 @@ TEST_F(UpgradeTest, ReregisterOldAgentWithMultiRoleMaster)
   master = StartMaster(masterFlags);
   ASSERT_SOME(master);
 
-  // Simulate a new master detected event on the agent,
-  // so that the agent will do a re-registration.
-  detector.appoint(master.get()->pid);
-
   // Cause the scheduler to re-register with the master.
   Future<Nothing> disconnected;
   EXPECT_CALL(sched, disconnected(&driver))
     .WillOnce(FutureSatisfy(&disconnected));
 
-  EXPECT_CALL(exec, shutdown(_))
-    .Times(AtMost(1));
+  // Simulate a new master detected event on the agent,
+  // so that the agent will do a re-registration.
+  detector.appoint(master.get()->pid);
 
   Clock::settle();
   AWAIT_READY(disconnected);