This is an automated email from the ASF dual-hosted git repository.

abudnik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit dee4b849c8179ea46947c8ea4dd031f6eb37b659
Author: Andrei Budnik <abud...@apache.org>
AuthorDate: Fri Sep 6 17:01:56 2019 +0200

    Added `futureTracker` to the `SlaveOptions` in tests.
    
    `PendingFutureTracker` is shared across both Mesos containerizer and
    the agent, so we need to add an option to be able to start a slave in
    tests with an instance of the `futureTrack` as a parameter.
    
    Review: https://reviews.apache.org/r/71454
---
 src/tests/cluster.cpp | 20 +++++++++++++-------
 src/tests/cluster.hpp |  5 +++++
 src/tests/mesos.cpp   |  1 +
 src/tests/mesos.hpp   |  8 ++++++++
 4 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/src/tests/cluster.cpp b/src/tests/cluster.cpp
index 1646516..f7bc882 100644
--- a/src/tests/cluster.cpp
+++ b/src/tests/cluster.cpp
@@ -416,6 +416,7 @@ Try<process::Owned<Slave>> Slave::create(
     const Option<mesos::slave::QoSController*>& qosController,
     const Option<mesos::SecretGenerator*>& secretGenerator,
     const Option<Authorizer*>& providedAuthorizer,
+    const Option<PendingFutureTracker*>& futureTracker,
     bool mock)
 {
   process::Owned<Slave> slave(new Slave());
@@ -447,10 +448,15 @@ Try<process::Owned<Slave>> Slave::create(
   }
 #endif // __WINDOWS__
 
-  Try<PendingFutureTracker*> futureTracker = PendingFutureTracker::create();
-  if (futureTracker.isError()) {
-    return Error(
-        "Failed to create pending future tracker: " + futureTracker.error());
+  // If the future tracker is not provided, create a default one.
+  if (futureTracker.isNone()) {
+    Try<PendingFutureTracker*> _futureTracker = PendingFutureTracker::create();
+    if (_futureTracker.isError()) {
+      return Error(
+          "Failed to create pending future tracker: " + 
_futureTracker.error());
+    }
+
+    slave->futureTracker.reset(_futureTracker.get());
   }
 
   // If the containerizer is not provided, create a default one.
@@ -468,7 +474,7 @@ Try<process::Owned<Slave>> Slave::create(
           gc.getOrElse(slave->gc.get()),
           nullptr,
           volumeGidManager,
-          futureTracker.get());
+          futureTracker.getOrElse(slave->futureTracker.get()));
 
     if (_containerizer.isError()) {
       return Error("Failed to create containerizer: " + 
_containerizer.error());
@@ -621,7 +627,7 @@ Try<process::Owned<Slave>> Slave::create(
         qosController.getOrElse(slave->qosController.get()),
         secretGenerator.getOrElse(slave->secretGenerator.get()),
         volumeGidManager,
-        futureTracker.get(),
+        futureTracker.getOrElse(slave->futureTracker.get()),
         authorizer));
   } else {
     slave->slave.reset(new slave::Slave(
@@ -636,7 +642,7 @@ Try<process::Owned<Slave>> Slave::create(
         qosController.getOrElse(slave->qosController.get()),
         secretGenerator.getOrElse(slave->secretGenerator.get()),
         volumeGidManager,
-        futureTracker.get(),
+        futureTracker.getOrElse(slave->futureTracker.get()),
         authorizer));
   }
 
diff --git a/src/tests/cluster.hpp b/src/tests/cluster.hpp
index c04ee14..415a60f 100644
--- a/src/tests/cluster.hpp
+++ b/src/tests/cluster.hpp
@@ -170,6 +170,7 @@ public:
       const Option<mesos::slave::QoSController*>& qosController = None(),
       const Option<mesos::SecretGenerator*>& secretGenerator = None(),
       const Option<Authorizer*>& authorizer = None(),
+      const Option<PendingFutureTracker*>& futureTracker = None(),
       bool mock = false);
 
   ~Slave();
@@ -227,6 +228,10 @@ private:
   // of who created it).
   slave::Containerizer* containerizer = nullptr;
 
+  // Pending future tracker must be destroyed last since there may be
+  // pending requests related to the dependant objects declared below.
+  process::Owned<PendingFutureTracker> futureTracker;
+
   // Dependencies that are created by the factory method.
   process::Owned<Authorizer> authorizer;
   process::Owned<slave::Containerizer> ownedContainerizer;
diff --git a/src/tests/mesos.cpp b/src/tests/mesos.cpp
index e77db22..664c302 100644
--- a/src/tests/mesos.cpp
+++ b/src/tests/mesos.cpp
@@ -347,6 +347,7 @@ Try<Owned<cluster::Slave>> MesosTest::StartSlave(const 
SlaveOptions& options)
       options.qosController,
       options.secretGenerator,
       options.authorizer,
+      options.futureTracker,
       options.mock);
 
   if (slave.isSome() && !options.mock) {
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index ecde518..73b1866 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -186,6 +186,13 @@ struct SlaveOptions
     return *this;
   }
 
+  SlaveOptions& withFutureTracker(
+      const Option<PendingFutureTracker*>& futureTracker)
+  {
+    this->futureTracker = futureTracker;
+    return *this;
+  }
+
   mesos::master::detector::MasterDetector* detector;
   bool mock;
   Option<slave::Flags> flags;
@@ -197,6 +204,7 @@ struct SlaveOptions
   Option<mesos::slave::QoSController*> qosController;
   Option<mesos::SecretGenerator*> secretGenerator;
   Option<Authorizer*> authorizer;
+  Option<PendingFutureTracker*> futureTracker;
 };
 
 

Reply via email to