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.