Propagated UnavailableResources from Inverse Offers to the allocator. Review: https://reviews.apache.org/r/38246
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/eec3fec0 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/eec3fec0 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/eec3fec0 Branch: refs/heads/master Commit: eec3fec01a28d48fd26a71de7d918df71032d4ef Parents: f388394 Author: Artem Harutyunyan <[email protected]> Authored: Sat Sep 19 14:24:23 2015 -0400 Committer: Joris Van Remoortere <[email protected]> Committed: Sun Sep 20 14:21:09 2015 -0400 ---------------------------------------------------------------------- include/mesos/master/allocator.hpp | 5 ++++- src/master/allocator/mesos/allocator.hpp | 4 ++++ src/master/allocator/mesos/hierarchical.hpp | 2 ++ src/master/master.cpp | 27 ++++++++++++++++++++++++ src/tests/mesos.hpp | 9 ++++---- 5 files changed, 42 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/eec3fec0/include/mesos/master/allocator.hpp ---------------------------------------------------------------------- diff --git a/include/mesos/master/allocator.hpp b/include/mesos/master/allocator.hpp index 2dc6312..7301058 100644 --- a/include/mesos/master/allocator.hpp +++ b/include/mesos/master/allocator.hpp @@ -153,10 +153,13 @@ public: // revoked. If `status` is not set then the inverse offer was not responded // to, possibly because the offer timed out or was rescinded. This might // require the implementation of the function to remove any inverse offers - // that are outstanding. + // that are outstanding. The `unavailableResources` can be used by the + // allocator to distinguish between different inverse offers sent to the same + // framework for the same slave. virtual void updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<InverseOfferStatus>& status) = 0; // Informs the Allocator to recover resources that are considered http://git-wip-us.apache.org/repos/asf/mesos/blob/eec3fec0/src/master/allocator/mesos/allocator.hpp ---------------------------------------------------------------------- diff --git a/src/master/allocator/mesos/allocator.hpp b/src/master/allocator/mesos/allocator.hpp index 86f6c55..4f02dd1 100644 --- a/src/master/allocator/mesos/allocator.hpp +++ b/src/master/allocator/mesos/allocator.hpp @@ -119,6 +119,7 @@ public: void updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<mesos::master::InverseOfferStatus>& status); void recoverResources( @@ -226,6 +227,7 @@ public: virtual void updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<mesos::master::InverseOfferStatus>& status) = 0; virtual void recoverResources( @@ -486,6 +488,7 @@ template <typename AllocatorProcess> inline void MesosAllocator<AllocatorProcess>::updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<mesos::master::InverseOfferStatus>& status) { return process::dispatch( @@ -493,6 +496,7 @@ inline void MesosAllocator<AllocatorProcess>::updateInverseOffer( &MesosAllocatorProcess::updateInverseOffer, slaveId, frameworkId, + unavailableResources, status); } http://git-wip-us.apache.org/repos/asf/mesos/blob/eec3fec0/src/master/allocator/mesos/hierarchical.hpp ---------------------------------------------------------------------- diff --git a/src/master/allocator/mesos/hierarchical.hpp b/src/master/allocator/mesos/hierarchical.hpp index e944120..a4c4107 100644 --- a/src/master/allocator/mesos/hierarchical.hpp +++ b/src/master/allocator/mesos/hierarchical.hpp @@ -157,6 +157,7 @@ public: void updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<mesos::master::InverseOfferStatus>& status); void recoverResources( @@ -877,6 +878,7 @@ void HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::updateInverseOffer( const SlaveID& slaveId, const FrameworkID& frameworkId, + const Option<UnavailableResources>& unavailableResources, const Option<mesos::master::InverseOfferStatus>& status) { CHECK(initialized); http://git-wip-us.apache.org/repos/asf/mesos/blob/eec3fec0/src/master/master.cpp ---------------------------------------------------------------------- diff --git a/src/master/master.cpp b/src/master/master.cpp index 5eef29b..5393ee8 100644 --- a/src/master/master.cpp +++ b/src/master/master.cpp @@ -2343,6 +2343,9 @@ void Master::_subscribe( allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer, true); // Rescind. @@ -2508,6 +2511,9 @@ void Master::deactivate(Framework* framework) allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer, true); // Rescind. @@ -2557,6 +2563,9 @@ void Master::deactivate(Slave* slave) allocator->updateInverseOffer( slave->id, inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer, true); // Rescind! @@ -2838,6 +2847,9 @@ void Master::accept( allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, status); removeInverseOffer(inverseOffer); @@ -3309,6 +3321,9 @@ void Master::decline( allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, status); removeInverseOffer(inverseOffer); @@ -4320,6 +4335,9 @@ void Master::updateUnavailability( allocator->updateInverseOffer( slave->id, inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer, true); // Rescind! @@ -5494,6 +5512,9 @@ void Master::_failoverFramework(Framework* framework) allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer); @@ -5606,6 +5627,9 @@ void Master::removeFramework(Framework* framework) allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer); @@ -6247,6 +6271,9 @@ void Master::inverseOfferTimeout(const OfferID& inverseOfferId) allocator->updateInverseOffer( inverseOffer->slave_id(), inverseOffer->framework_id(), + UnavailableResources{ + inverseOffer->resources(), + inverseOffer->unavailability()}, None()); removeInverseOffer(inverseOffer, true); http://git-wip-us.apache.org/repos/asf/mesos/blob/eec3fec0/src/tests/mesos.hpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp index 760dcb7..dd587bb 100644 --- a/src/tests/mesos.hpp +++ b/src/tests/mesos.hpp @@ -1361,7 +1361,7 @@ ACTION_P(InvokeUpdateUnavailability, allocator) ACTION_P(InvokeUpdateInverseOffer, allocator) { - return allocator->real->updateInverseOffer(arg0, arg1, arg2); + return allocator->real->updateInverseOffer(arg0, arg1, arg2, arg3); } @@ -1499,9 +1499,9 @@ public: EXPECT_CALL(*this, updateUnavailability(_, _)) .WillRepeatedly(DoDefault()); - ON_CALL(*this, updateInverseOffer(_, _, _)) + ON_CALL(*this, updateInverseOffer(_, _, _, _)) .WillByDefault(InvokeUpdateInverseOffer(this)); - EXPECT_CALL(*this, updateInverseOffer(_, _, _)) + EXPECT_CALL(*this, updateInverseOffer(_, _, _, _)) .WillRepeatedly(DoDefault()); ON_CALL(*this, recoverResources(_, _, _, _)) @@ -1590,9 +1590,10 @@ public: const SlaveID&, const Option<Unavailability>&)); - MOCK_METHOD3(updateInverseOffer, void( + MOCK_METHOD4(updateInverseOffer, void( const SlaveID&, const FrameworkID&, + const Option<UnavailableResources>&, const Option<mesos::master::InverseOfferStatus>&)); MOCK_METHOD4(recoverResources, void(
