You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mz...@apache.org on 2019/07/01 21:20:41 UTC

[mesos] 03/04: Added helpers to add and remove master minimum capabilities.

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

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

commit c82847ad1b8d3760d34ee1e8869c2b7286ccfaa1
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Fri Jun 28 14:15:02 2019 -0700

    Added helpers to add and remove master minimum capabilities.
    
    Also added a TODO about refactoring the helpers.
    
    Review: https://reviews.apache.org/r/70972
---
 src/common/protobuf_utils.cpp | 41 +++++++++++++++++++++++++++++++++++++++++
 src/common/protobuf_utils.hpp | 33 +++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+)

diff --git a/src/common/protobuf_utils.cpp b/src/common/protobuf_utils.cpp
index c5f762b..0112fcb 100644
--- a/src/common/protobuf_utils.cpp
+++ b/src/common/protobuf_utils.cpp
@@ -1359,6 +1359,47 @@ mesos::maintenance::Schedule createSchedule(
 } // namespace maintenance {
 
 namespace master {
+
+void addMinimumCapability(
+    google::protobuf::RepeatedPtrField<Registry::MinimumCapability>*
+      capabilities,
+    const MasterInfo::Capability::Type& capability)
+{
+  int capabilityIndex =
+    find_if(
+        capabilities->begin(),
+        capabilities->end(),
+        [&](const Registry::MinimumCapability& mc) {
+          return mc.capability() == MasterInfo_Capability_Type_Name(capability);
+        }) -
+    capabilities->begin();
+
+  if (capabilityIndex == capabilities->size()) {
+    capabilities->Add()->set_capability(
+        MasterInfo_Capability_Type_Name(capability));
+  }
+}
+
+
+void removeMinimumCapability(
+    google::protobuf::RepeatedPtrField<Registry::MinimumCapability>*
+      capabilities,
+    const MasterInfo::Capability::Type& capability)
+{
+  int capabilityIndex =
+    find_if(
+        capabilities->begin(),
+        capabilities->end(),
+        [&](const Registry::MinimumCapability& mc) {
+          return mc.capability() == MasterInfo_Capability_Type_Name(capability);
+        }) -
+    capabilities->begin();
+
+  if (capabilityIndex < capabilities->size()) {
+    capabilities->DeleteSubrange(capabilityIndex, 1);
+  }
+}
+
 namespace event {
 
 mesos::master::Event createTaskUpdated(
diff --git a/src/common/protobuf_utils.hpp b/src/common/protobuf_utils.hpp
index f1d74ce..893022b 100644
--- a/src/common/protobuf_utils.hpp
+++ b/src/common/protobuf_utils.hpp
@@ -43,6 +43,8 @@
 #include <stout/try.hpp>
 #include <stout/uuid.hpp>
 
+#include "master/registry.hpp"
+
 #include "messages/messages.hpp"
 
 // Forward declaration (in lieu of an include).
@@ -480,6 +482,37 @@ mesos::maintenance::Schedule createSchedule(
 
 namespace master {
 
+// TODO(mzhu): Consolidate these helpers into `struct Capabilities`.
+// For example, to add a minimum capability for `QUOTA_V2`, we could do the
+// following in the call site:
+//
+//  Capabilities capabilities = registry->minimum_capabilities();
+//  capabilities.quotaV2 = needsV2;
+//  *registry->mutable_minimum_capabilities() = capabilities.toStrings();
+//
+// For this to work, we need to:
+//  - Add a constructor from repeated `MinimumCapability`
+//  - Add a toStrings() that goes back to repeated string
+//  - Note, unknown capabilities need to be carried in the struct.
+//
+// In addition, we should consolidate the helper
+// `Master::misingMinimumCapabilities` into the struct as well.
+
+// Helper to add a minimum capability, it is a noop if already set.
+void addMinimumCapability(
+    google::protobuf::RepeatedPtrField<Registry::MinimumCapability>*
+      capabilities,
+    const MasterInfo::Capability::Type& capability);
+
+
+// Helper to remove a minimum capability,
+// it is a noop if already absent.
+void removeMinimumCapability(
+    google::protobuf::RepeatedPtrField<Registry::MinimumCapability>*
+      capabilities,
+    const MasterInfo::Capability::Type& capability);
+
+
 // TODO(bmahler): Store the repeated field within this so that we
 // don't drop unknown capabilities.
 struct Capabilities