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; };