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 <[email protected]> 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
