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 2016/12/03 01:38:38 UTC
mesos git commit: Introduced 'roles' validation in master.
Repository: mesos
Updated Branches:
refs/heads/master 1db91c14e -> 65eab2d96
Introduced 'roles' validation in master.
Leveraged `validation::framework::validate()` function introduced
in a previous patch to validate FrameworkInfo when a framework
subscribes with the master.
Review: https://reviews.apache.org/r/54301/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/65eab2d9
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/65eab2d9
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/65eab2d9
Branch: refs/heads/master
Commit: 65eab2d96ef17f7097aa10a6735877bbcca107e0
Parents: 1db91c1
Author: Jay Guo <gu...@cn.ibm.com>
Authored: Fri Dec 2 17:37:32 2016 -0800
Committer: Benjamin Mahler <bm...@apache.org>
Committed: Fri Dec 2 17:37:32 2016 -0800
----------------------------------------------------------------------
src/master/master.cpp | 56 +++++++++++++++++++++++++++++++++++++++-------
1 file changed, 48 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/65eab2d9/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index c2c08e1..b0670d9 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -2340,11 +2340,31 @@ void Master::subscribe(
LOG(INFO) << "Received subscription request for"
<< " HTTP framework '" << frameworkInfo.name() << "'";
- Option<Error> validationError = roles::validate(frameworkInfo.role());
+ Option<Error> validationError =
+ validation::framework::validate(frameworkInfo);
- if (validationError.isNone() && !isWhitelistedRole(frameworkInfo.role())) {
- validationError = Error("Role '" + frameworkInfo.role() + "' is not" +
- " present in the master's --roles");
+ if (validationError.isNone()) {
+ // Check the framework's role(s) against the whitelist.
+ set<string> invalidRoles;
+
+ if (protobuf::frameworkHasCapability(
+ frameworkInfo,
+ FrameworkInfo::Capability::MULTI_ROLE)) {
+ foreach (const string& role, frameworkInfo.roles()) {
+ if (!isWhitelistedRole(role)) {
+ invalidRoles.insert(role);
+ }
+ }
+ } else {
+ if (!isWhitelistedRole(frameworkInfo.role())) {
+ invalidRoles.insert(frameworkInfo.role());
+ }
+ }
+
+ if (!invalidRoles.empty()) {
+ validationError = Error("Roles " + stringify(invalidRoles) +
+ " are not present in master's --roles");
+ }
}
// TODO(vinod): Deprecate this in favor of authorization.
@@ -2565,11 +2585,31 @@ void Master::subscribe(
return;
}
- Option<Error> validationError = roles::validate(frameworkInfo.role());
+ Option<Error> validationError =
+ validation::framework::validate(frameworkInfo);
- if (validationError.isNone() && !isWhitelistedRole(frameworkInfo.role())) {
- validationError = Error("Role '" + frameworkInfo.role() + "' is not" +
- " present in the master's --roles");
+ if (validationError.isNone()) {
+ // Check the framework's role(s) against the whitelist.
+ set<string> invalidRoles;
+
+ if (protobuf::frameworkHasCapability(
+ frameworkInfo,
+ FrameworkInfo::Capability::MULTI_ROLE)) {
+ foreach (const string& role, frameworkInfo.roles()) {
+ if (!isWhitelistedRole(role)) {
+ invalidRoles.insert(role);
+ }
+ }
+ } else {
+ if (!isWhitelistedRole(frameworkInfo.role())) {
+ invalidRoles.insert(frameworkInfo.role());
+ }
+ }
+
+ if (!invalidRoles.empty()) {
+ validationError = Error("Roles " + stringify(invalidRoles) +
+ " are not present in the master's --roles");
+ }
}
// TODO(vinod): Deprecate this in favor of authorization.