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