V1 API: Split Rescind for offers and Inverse Offers. Review: https://reviews.apache.org/r/46757
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/86c952ba Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/86c952ba Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/86c952ba Branch: refs/heads/master Commit: 86c952ba77803f0fce4e64a9f861c229247442c2 Parents: e9c3b6d Author: Joris Van Remoortere <joris.van.remoort...@gmail.com> Authored: Tue Mar 29 17:33:04 2016 +0200 Committer: Joris Van Remoortere <joris.van.remoort...@gmail.com> Committed: Tue May 31 15:25:54 2016 -0700 ---------------------------------------------------------------------- include/mesos/scheduler/scheduler.proto | 27 +++++++++++++++++-------- include/mesos/v1/scheduler/scheduler.proto | 27 +++++++++++++++++-------- src/cli/execute.cpp | 1 + src/examples/long_lived_framework.cpp | 1 + src/examples/test_http_framework.cpp | 5 +++++ src/internal/evolve.cpp | 16 +++++++++++++++ src/internal/evolve.hpp | 1 + src/master/master.cpp | 4 ++-- src/messages/messages.proto | 13 ++++++++++++ src/sched/sched.cpp | 1 + src/tests/mesos.hpp | 6 ++++++ 11 files changed, 84 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/include/mesos/scheduler/scheduler.proto ---------------------------------------------------------------------- diff --git a/include/mesos/scheduler/scheduler.proto b/include/mesos/scheduler/scheduler.proto index b56e5dc..a82d11c 100644 --- a/include/mesos/scheduler/scheduler.proto +++ b/include/mesos/scheduler/scheduler.proto @@ -39,14 +39,15 @@ message Event { // in a backwards-compatible way. See: MESOS-4997. UNKNOWN = 0; - SUBSCRIBED = 1; // See 'Subscribed' below. - OFFERS = 2; // See 'Offers' below. - INVERSE_OFFERS = 9; // See 'InverseOffers' below. - RESCIND = 3; // See 'Rescind' below. - UPDATE = 4; // See 'Update' below. - MESSAGE = 5; // See 'Message' below. - FAILURE = 6; // See 'Failure' below. - ERROR = 7; // See 'Error' below. + SUBSCRIBED = 1; // See 'Subscribed' below. + OFFERS = 2; // See 'Offers' below. + INVERSE_OFFERS = 9; // See 'InverseOffers' below. + RESCIND = 3; // See 'Rescind' below. + RESCIND_INVERSE_OFFER = 10; // See 'RescindInverseOffer' below. + UPDATE = 4; // See 'Update' below. + MESSAGE = 5; // See 'Message' below. + FAILURE = 6; // See 'Failure' below. + ERROR = 7; // See 'Error' below. // Periodic message sent by the Mesos master according to // 'Subscribed.heartbeat_interval_seconds'. If the scheduler does @@ -94,6 +95,15 @@ message Event { required OfferID offer_id = 1; } + // Received when a particular inverse offer is no longer valid + // (e.g., the agent corresponding to the offer has been removed) + // and hence needs to be rescinded. Any future calls ('Accept' / + // 'Decline') made by the scheduler regarding this inverse offer + // will be invalid. + message RescindInverseOffer { + required OfferID inverse_offer_id = 1; + } + // Received whenever there is a status update that is generated by // the executor or slave or master. Status updates should be used by // executors to reliably communicate the status of the tasks that @@ -154,6 +164,7 @@ message Event { optional Offers offers = 3; optional InverseOffers inverse_offers = 9; optional Rescind rescind = 4; + optional RescindInverseOffer rescind_inverse_offer = 10; optional Update update = 5; optional Message message = 6; optional Failure failure = 7; http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/include/mesos/v1/scheduler/scheduler.proto ---------------------------------------------------------------------- diff --git a/include/mesos/v1/scheduler/scheduler.proto b/include/mesos/v1/scheduler/scheduler.proto index 0b44930..978e4c2 100644 --- a/include/mesos/v1/scheduler/scheduler.proto +++ b/include/mesos/v1/scheduler/scheduler.proto @@ -39,14 +39,15 @@ message Event { // in a backwards-compatible way. See: MESOS-4997. UNKNOWN = 0; - SUBSCRIBED = 1; // See 'Subscribed' below. - OFFERS = 2; // See 'Offers' below. - INVERSE_OFFERS = 9; // See 'InverseOffers' below. - RESCIND = 3; // See 'Rescind' below. - UPDATE = 4; // See 'Update' below. - MESSAGE = 5; // See 'Message' below. - FAILURE = 6; // See 'Failure' below. - ERROR = 7; // See 'Error' below. + SUBSCRIBED = 1; // See 'Subscribed' below. + OFFERS = 2; // See 'Offers' below. + INVERSE_OFFERS = 9; // See 'InverseOffers' below. + RESCIND = 3; // See 'Rescind' below. + RESCIND_INVERSE_OFFER = 10; // See 'RescindInverseOffer' below. + UPDATE = 4; // See 'Update' below. + MESSAGE = 5; // See 'Message' below. + FAILURE = 6; // See 'Failure' below. + ERROR = 7; // See 'Error' below. // Periodic message sent by the Mesos master according to // 'Subscribed.heartbeat_interval_seconds'. If the scheduler does @@ -94,6 +95,15 @@ message Event { required OfferID offer_id = 1; } + // Received when a particular inverse offer is no longer valid + // (e.g., the agent corresponding to the offer has been removed) + // and hence needs to be rescinded. Any future calls ('Accept' / + // 'Decline') made by the scheduler regarding this inverse offer + // will be invalid. + message RescindInverseOffer { + required OfferID inverse_offer_id = 1; + } + // Received whenever there is a status update that is generated by // the executor or agent or master. Status updates should be used by // executors to reliably communicate the status of the tasks that @@ -154,6 +164,7 @@ message Event { optional Offers offers = 3; optional InverseOffers inverse_offers = 9; optional Rescind rescind = 4; + optional RescindInverseOffer rescind_inverse_offer = 10; optional Update update = 5; optional Message message = 6; optional Failure failure = 7; http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/cli/execute.cpp ---------------------------------------------------------------------- diff --git a/src/cli/execute.cpp b/src/cli/execute.cpp index 95e1db9..9b8f8a3 100644 --- a/src/cli/execute.cpp +++ b/src/cli/execute.cpp @@ -449,6 +449,7 @@ protected: case Event::INVERSE_OFFERS: case Event::FAILURE: case Event::RESCIND: + case Event::RESCIND_INVERSE_OFFER: case Event::MESSAGE: { break; } http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/examples/long_lived_framework.cpp ---------------------------------------------------------------------- diff --git a/src/examples/long_lived_framework.cpp b/src/examples/long_lived_framework.cpp index 848849f..4752bb6 100644 --- a/src/examples/long_lived_framework.cpp +++ b/src/examples/long_lived_framework.cpp @@ -220,6 +220,7 @@ protected: case Event::HEARTBEAT: case Event::INVERSE_OFFERS: case Event::RESCIND: + case Event::RESCIND_INVERSE_OFFER: case Event::MESSAGE: { break; } http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/examples/test_http_framework.cpp ---------------------------------------------------------------------- diff --git a/src/examples/test_http_framework.cpp b/src/examples/test_http_framework.cpp index 88e4495..cf6baed 100644 --- a/src/examples/test_http_framework.cpp +++ b/src/examples/test_http_framework.cpp @@ -136,6 +136,11 @@ public: break; } + case Event::RESCIND_INVERSE_OFFER: { + cout << endl << "Received a RESCIND_INVERSE_OFFER event" << endl; + break; + } + case Event::UPDATE: { cout << endl << "Received an UPDATE event" << endl; http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/internal/evolve.cpp ---------------------------------------------------------------------- diff --git a/src/internal/evolve.cpp b/src/internal/evolve.cpp index 5e0be6b..c255195 100644 --- a/src/internal/evolve.cpp +++ b/src/internal/evolve.cpp @@ -218,12 +218,28 @@ v1::scheduler::Event evolve(const RescindResourceOfferMessage& message) event.set_type(v1::scheduler::Event::RESCIND); v1::scheduler::Event::Rescind* rescind = event.mutable_rescind(); + rescind->mutable_offer_id()->CopyFrom(evolve(message.offer_id())); return event; } +v1::scheduler::Event evolve(const RescindInverseOfferMessage& message) +{ + v1::scheduler::Event event; + event.set_type(v1::scheduler::Event::RESCIND_INVERSE_OFFER); + + v1::scheduler::Event::RescindInverseOffer* rescindInverseOffer = + event.mutable_rescind_inverse_offer(); + + rescindInverseOffer->mutable_inverse_offer_id()->CopyFrom(evolve( + message.inverse_offer_id())); + + return event; +} + + v1::scheduler::Event evolve(const StatusUpdateMessage& message) { v1::scheduler::Event event; http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/internal/evolve.hpp ---------------------------------------------------------------------- diff --git a/src/internal/evolve.hpp b/src/internal/evolve.hpp index 51c2d6c..66a3dea 100644 --- a/src/internal/evolve.hpp +++ b/src/internal/evolve.hpp @@ -85,6 +85,7 @@ v1::scheduler::Event evolve(const FrameworkReregisteredMessage& message); v1::scheduler::Event evolve(const ResourceOffersMessage& message); v1::scheduler::Event evolve(const InverseOffersMessage& message); v1::scheduler::Event evolve(const RescindResourceOfferMessage& message); +v1::scheduler::Event evolve(const RescindInverseOfferMessage& message); v1::scheduler::Event evolve(const StatusUpdateMessage& message); v1::scheduler::Event evolve(const LostSlaveMessage& message); v1::scheduler::Event evolve(const ExitedExecutorMessage& message); http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/master/master.cpp ---------------------------------------------------------------------- diff --git a/src/master/master.cpp b/src/master/master.cpp index 26e8d3c..3e992aa 100644 --- a/src/master/master.cpp +++ b/src/master/master.cpp @@ -7023,8 +7023,8 @@ void Master::removeInverseOffer(InverseOffer* inverseOffer, bool rescind) slave->removeInverseOffer(inverseOffer); if (rescind) { - RescindResourceOfferMessage message; - message.mutable_offer_id()->CopyFrom(inverseOffer->id()); + RescindInverseOfferMessage message; + message.mutable_inverse_offer_id()->CopyFrom(inverseOffer->id()); framework->send(message); } http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/messages/messages.proto ---------------------------------------------------------------------- diff --git a/src/messages/messages.proto b/src/messages/messages.proto index 10e3776..6d7eccc 100644 --- a/src/messages/messages.proto +++ b/src/messages/messages.proto @@ -253,6 +253,19 @@ message RescindResourceOfferMessage { /** + * Notifies the scheduler that a particular inverse offer is not longer + * valid. + * NOTE: This message is only sent through the V1 HTTP API. Driver + * based schedulers will not receive it. + * + * See scheduler::Event::RescindInverseOffer. + */ +message RescindInverseOfferMessage { + required OfferID inverse_offer_id = 1; +} + + +/** * Removes all filters previously set by the scheduler. * * Used by the pre-Event/Call Mesos scheduler driver. http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/sched/sched.cpp ---------------------------------------------------------------------- diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp index 2e2c16f..9f0c51d 100644 --- a/src/sched/sched.cpp +++ b/src/sched/sched.cpp @@ -672,6 +672,7 @@ protected: } case Event::INVERSE_OFFERS: + case Event::RESCIND_INVERSE_OFFER: case Event::HEARTBEAT: { break; } http://git-wip-us.apache.org/repos/asf/mesos/blob/86c952ba/src/tests/mesos.hpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp index fef2bec..5d7b5d1 100644 --- a/src/tests/mesos.hpp +++ b/src/tests/mesos.hpp @@ -976,6 +976,9 @@ public: inverseOffers, void(Mesos*, const typename Event::InverseOffers&)); MOCK_METHOD2_T(rescind, void(Mesos*, const typename Event::Rescind&)); + MOCK_METHOD2_T( + rescindInverseOffers, + void(Mesos*, const typename Event::RescindInverseOffer&)); MOCK_METHOD2_T(update, void(Mesos*, const typename Event::Update&)); MOCK_METHOD2_T(message, void(Mesos*, const typename Event::Message&)); MOCK_METHOD2_T(failure, void(Mesos*, const typename Event::Failure&)); @@ -996,6 +999,9 @@ public: case Event::RESCIND: rescind(mesos, event.rescind()); break; + case Event::RESCIND_INVERSE_OFFER: + rescindInverseOffers(mesos, event.rescind_inverse_offer()); + break; case Event::UPDATE: update(mesos, event.update()); break;