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;

Reply via email to