You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2019/07/03 23:07:10 UTC

[mesos] 03/04: Added ability to suppress a subset of roles in the scheduler driver.

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

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

commit 57c2b7098ee523f3f0f647c6b334cce37266fe2a
Author: Andrei Sekretenko <as...@mesosphere.io>
AuthorDate: Wed Jul 3 18:47:53 2019 -0400

    Added ability to suppress a subset of roles in the scheduler driver.
    
    This patch adds to the scheduler driver a 'suppressOffers(roles)'
    method, which sends the SUPPRESS call for these roles and adds them to
    the suppressed roles set.
    
    Review: https://reviews.apache.org/r/70983/
---
 include/mesos/scheduler.hpp |  9 +++++++++
 src/sched/sched.cpp         | 44 ++++++++++++++++++++++++++++++++++++++------
 2 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/include/mesos/scheduler.hpp b/include/mesos/scheduler.hpp
index cc3a278..61cc846 100644
--- a/include/mesos/scheduler.hpp
+++ b/include/mesos/scheduler.hpp
@@ -312,6 +312,13 @@ public:
   // re-registration.
   virtual Status suppressOffers() = 0;
 
+  // Adds the roles to the suppressed set. If the framework is not connected
+  // to the master, an up-to-date set of suppressed roles will be sent to
+  // the master during re-registration.
+  //
+  // NOTE: If 'roles' is empty, this method does nothing.
+  virtual Status suppressOffers(const std::vector<std::string>& roles) = 0;
+
   // Acknowledges the status update. This should only be called
   // once the status update is processed durably by the scheduler.
   // Not that explicit acknowledgements must be requested via the
@@ -502,6 +509,8 @@ public:
 
   Status suppressOffers() override;
 
+  Status suppressOffers(const std::vector<std::string>& roles) override;
+
   Status acknowledgeStatusUpdate(
       const TaskStatus& status) override;
 
diff --git a/src/sched/sched.cpp b/src/sched/sched.cpp
index 47b87ad..768ce7d 100644
--- a/src/sched/sched.cpp
+++ b/src/sched/sched.cpp
@@ -1475,10 +1475,16 @@ protected:
     send(master->pid(), call);
   }
 
-  void suppressOffers()
+  void suppressOffers(const vector<string>& roles)
   {
-    suppressedRoles =
-      std::set<string>(framework.roles().begin(), framework.roles().end());
+    if (roles.empty()) {
+      suppressedRoles =
+        std::set<string>(framework.roles().begin(), framework.roles().end());
+    } else {
+      for (const string& role : roles) {
+        suppressedRoles.emplace(role);
+      }
+    }
 
     if (!connected) {
       VLOG(1) << "Ignoring SUPPRESS as master is disconnected;"
@@ -1489,14 +1495,20 @@ protected:
       return;
     }
 
-    VLOG(2) << "Sending SUPPRESS for all roles";
-
     Call call;
 
     CHECK(framework.has_id());
     call.mutable_framework_id()->CopyFrom(framework.id());
     call.set_type(Call::SUPPRESS);
 
+    if (roles.empty()) {
+      VLOG(2) << "Sending SUPPRESS for all roles";
+    } else {
+      VLOG(2) << "Sending SUPPRESS for roles: " << stringify(roles);
+      *call.mutable_suppress()->mutable_roles() =
+        RepeatedPtrField<string>(roles.begin(), roles.end());
+    }
+
     CHECK_SOME(master);
     send(master->pid(), call);
   }
@@ -2375,7 +2387,27 @@ Status MesosSchedulerDriver::suppressOffers()
 
     CHECK(process != nullptr);
 
-    dispatch(process, &SchedulerProcess::suppressOffers);
+    dispatch(process, &SchedulerProcess::suppressOffers, vector<string>());
+
+    return status;
+  }
+}
+
+
+Status MesosSchedulerDriver::suppressOffers(const vector<string>& roles)
+{
+  if (roles.empty()) {
+    return status;
+  }
+
+  synchronized (mutex) {
+    if (status != DRIVER_RUNNING) {
+      return status;
+    }
+
+    CHECK(process != nullptr);
+
+    dispatch(process, &SchedulerProcess::suppressOffers, roles);
 
     return status;
   }