You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ne...@apache.org on 2017/05/24 17:02:29 UTC

mesos git commit: Fixed flakiness in MasterAllocatorTest.ResourcesUnused.

Repository: mesos
Updated Branches:
  refs/heads/master d225d4d41 -> 6fe4be921


Fixed flakiness in MasterAllocatorTest.ResourcesUnused.

In the test, `sched1` registers with the master and launches a task on
half the resources it is offered. Then `sched2` registers and should be
offered the remaining resources. The problem is that, because the test
did not pause the clock, a batch allocation might occur between the
first task launch and the second scheduler registering. The test tried
to account for this (by having `sched1` decline any additional offers it
receives), but this was not done correctly: declining the offer will
result in calling `recoverResources` again, which the test did not
account for.

Seems simpler to instead pause the clock, which should prevent the
possibility of a batch allocation in the first place.

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


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

Branch: refs/heads/master
Commit: 6fe4be92180d125753729f26887aa9fe853203a7
Parents: d225d4d
Author: Neil Conway <ne...@gmail.com>
Authored: Tue May 23 16:37:36 2017 -0700
Committer: Neil Conway <ne...@gmail.com>
Committed: Wed May 24 09:54:55 2017 -0700

----------------------------------------------------------------------
 src/tests/master_allocator_tests.cpp | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/6fe4be92/src/tests/master_allocator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_allocator_tests.cpp b/src/tests/master_allocator_tests.cpp
index 49d87af..750e030 100644
--- a/src/tests/master_allocator_tests.cpp
+++ b/src/tests/master_allocator_tests.cpp
@@ -208,6 +208,8 @@ TYPED_TEST(MasterAllocatorTest, SingleFramework)
 // reoffered appropriately.
 TYPED_TEST(MasterAllocatorTest, ResourcesUnused)
 {
+  Clock::pause();
+
   TestAllocator<TypeParam> allocator;
 
   EXPECT_CALL(allocator, initialize(_, _, _, _));
@@ -221,7 +223,10 @@ TYPED_TEST(MasterAllocatorTest, ResourcesUnused)
   slave::Flags slaveFlags = this->CreateSlaveFlags();
   slaveFlags.resources = Some("cpus:2;mem:1024");
 
-  EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _));
+  Future<Nothing> addSlave;
+  EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _))
+    .WillOnce(DoAll(InvokeAddSlave(&allocator),
+                    FutureSatisfy(&addSlave)));
 
   Owned<MasterDetector> detector = master.get()->createDetector();
 
@@ -229,6 +234,11 @@ TYPED_TEST(MasterAllocatorTest, ResourcesUnused)
     this->StartSlave(detector.get(), &containerizer, slaveFlags);
   ASSERT_SOME(slave);
 
+  Clock::advance(slaveFlags.authentication_backoff_factor);
+  Clock::advance(slaveFlags.registration_backoff_factor);
+
+  AWAIT_READY(addSlave);
+
   MockScheduler sched1;
   MesosSchedulerDriver driver1(
       &sched1, DEFAULT_FRAMEWORK_INFO, master.get()->pid, DEFAULT_CREDENTIAL);
@@ -237,13 +247,6 @@ TYPED_TEST(MasterAllocatorTest, ResourcesUnused)
 
   EXPECT_CALL(sched1, registered(_, _, _));
 
-  // We decline offers that we aren't expecting so that the resources
-  // get aggregated. Note that we need to do this _first_ and
-  // _separate_ from the expectation below so that this expectation is
-  // checked last and matches all possible offers.
-  EXPECT_CALL(sched1, resourceOffers(_, _))
-    .WillRepeatedly(DeclineOffers());
-
   // The first offer will contain all of the slave's resources, since
   // this is the only framework running so far. Launch a task that
   // uses less than that to leave some resources unused.
@@ -267,7 +270,8 @@ TYPED_TEST(MasterAllocatorTest, ResourcesUnused)
 
   // We need to wait until the allocator knows about the unused
   // resources to start the second framework so that we get the
-  // expected offer.
+  // expected offer. Because the clock is paused, a batch allocation
+  // will not occur in the time before the second framework registers.
   AWAIT_READY(recoverResources);
 
   FrameworkInfo frameworkInfo2 = DEFAULT_FRAMEWORK_INFO;