You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2014/06/17 22:42:31 UTC

git commit: Added flags::parse() overload for ACLs protobuf.

Repository: mesos
Updated Branches:
  refs/heads/master 3204dc977 -> 67b319044


Added flags::parse() overload for ACLs protobuf.

Review: https://reviews.apache.org/r/22690


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/67b31904
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/67b31904
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/67b31904

Branch: refs/heads/master
Commit: 67b3190446a3693793e0db3ff07a80c766ef35fd
Parents: 3204dc9
Author: Vinod Kone <vi...@twitter.com>
Authored: Tue Jun 17 11:44:38 2014 -0700
Committer: Vinod Kone <vi...@twitter.com>
Committed: Tue Jun 17 13:42:15 2014 -0700

----------------------------------------------------------------------
 src/Makefile.am                          |  1 +
 src/authorizer/authorizer.cpp            | 10 ++-----
 src/authorizer/authorizer.hpp            |  2 +-
 src/common/parse.hpp                     | 43 +++++++++++++++++++++++++++
 src/common/type_utils.hpp                |  8 +++++
 src/master/flags.hpp                     |  7 ++++-
 src/tests/master_authorization_tests.cpp |  8 ++---
 src/tests/mesos.cpp                      |  2 +-
 8 files changed, 66 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index 3e623cc..7ae6760 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -331,6 +331,7 @@ libmesos_no_3rdparty_la_SOURCES +=					\
 	authorizer/authorizer.hpp					\
 	common/attributes.hpp						\
 	common/build.hpp common/date_utils.hpp common/factory.hpp	\
+	common/parse.hpp						\
 	common/protobuf_utils.hpp					\
 	common/http.hpp							\
 	common/lock.hpp							\

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/authorizer/authorizer.cpp
----------------------------------------------------------------------
diff --git a/src/authorizer/authorizer.cpp b/src/authorizer/authorizer.cpp
index c46b31d..40a14be 100644
--- a/src/authorizer/authorizer.cpp
+++ b/src/authorizer/authorizer.cpp
@@ -233,15 +233,9 @@ private:
 };
 
 
-Try<Owned<Authorizer> > Authorizer::create(const JSON::Object& acls_)
+Try<Owned<Authorizer> > Authorizer::create(const ACLs& acls)
 {
-  // Convert ACLs from JSON to Protobuf.
-  Try<ACLs> acls = protobuf::parse<ACLs>(acls_);
-  if (acls.isError()) {
-    return Error("Invalid ACLs format: " + acls.error());
-  }
-
-  Try<Owned<LocalAuthorizer> > authorizer = LocalAuthorizer::create(acls.get());
+  Try<Owned<LocalAuthorizer> > authorizer = LocalAuthorizer::create(acls);
 
   if (authorizer.isError()) {
     return Error(authorizer.error());

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/authorizer/authorizer.hpp
----------------------------------------------------------------------
diff --git a/src/authorizer/authorizer.hpp b/src/authorizer/authorizer.hpp
index 43e1c3b..b7f1119 100644
--- a/src/authorizer/authorizer.hpp
+++ b/src/authorizer/authorizer.hpp
@@ -43,7 +43,7 @@ public:
   virtual ~Authorizer() {}
 
   // Attempts to create an Authorizer based on the ACLs.
-  static Try<process::Owned<Authorizer> > create(const JSON::Object& acls);
+  static Try<process::Owned<Authorizer> > create(const ACLs& acls);
 
   // Returns true if the ACL can be satisfied or false otherwise.
   // A failed future indicates a transient failure and the user

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/common/parse.hpp
----------------------------------------------------------------------
diff --git a/src/common/parse.hpp b/src/common/parse.hpp
new file mode 100644
index 0000000..5b12e38
--- /dev/null
+++ b/src/common/parse.hpp
@@ -0,0 +1,43 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef __COMMON_PARSE_HPP__
+#define __COMMON_PARSE_HPP__
+
+#include <stout/error.hpp>
+#include <stout/json.hpp>
+#include <stout/protobuf.hpp>
+#include <stout/try.hpp>
+
+#include <stout/flags/parse.hpp>
+
+#include "mesos/mesos.hpp"
+
+namespace flags {
+
+template<>
+inline Try<mesos::ACLs> parse(const std::string& value)
+{
+  // Convert from string or file to JSON.
+  Try<JSON::Object> json = parse<JSON::Object>(value);
+  if (json.isError()) {
+    return Error(json.error());
+  }
+
+  // Convert from JSON to Protobuf.
+  return protobuf::parse<mesos::ACLs>(json.get());
+}
+
+} // namespace flags {
+
+#endif // __COMMON_PARSE_HPP__

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/common/type_utils.hpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.hpp b/src/common/type_utils.hpp
index 784a808..27ea4d2 100644
--- a/src/common/type_utils.hpp
+++ b/src/common/type_utils.hpp
@@ -114,6 +114,14 @@ inline std::ostream& operator << (
 }
 
 
+inline std::ostream& operator << (
+    std::ostream& stream,
+    const ACLs& acls)
+{
+  return stream << acls.DebugString();
+}
+
+
 inline bool operator == (const FrameworkID& left, const FrameworkID& right)
 {
   return left.value() == right.value();

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/master/flags.hpp
----------------------------------------------------------------------
diff --git a/src/master/flags.hpp b/src/master/flags.hpp
index 780e219..7850e45 100644
--- a/src/master/flags.hpp
+++ b/src/master/flags.hpp
@@ -25,11 +25,16 @@
 #include <stout/flags.hpp>
 #include <stout/json.hpp>
 #include <stout/option.hpp>
+#include <stout/protobuf.hpp>
+
+#include "common/parse.hpp"
 
 #include "logging/flags.hpp"
 
 #include "master/constants.hpp"
 
+#include "mesos/mesos.hpp"
+
 namespace mesos {
 namespace internal {
 namespace master {
@@ -258,7 +263,7 @@ public:
   bool authenticate_frameworks;
   bool authenticate_slaves;
   Option<std::string> credentials;
-  Option<JSON::Object> acls;
+  Option<ACLs> acls;
 };
 
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/tests/master_authorization_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_authorization_tests.cpp b/src/tests/master_authorization_tests.cpp
index 661d67e..478041c 100644
--- a/src/tests/master_authorization_tests.cpp
+++ b/src/tests/master_authorization_tests.cpp
@@ -77,7 +77,7 @@ TEST_F(MasterAuthorizationTest, AuthorizedTask)
   acl->mutable_users()->add_values("foo");
 
   master::Flags flags = CreateMasterFlags();
-  flags.acls = JSON::Protobuf(acls);
+  flags.acls = acls;
 
   Try<PID<Master> > master = StartMaster(flags);
   ASSERT_SOME(master);
@@ -155,7 +155,7 @@ TEST_F(MasterAuthorizationTest, UnauthorizedTask)
   acl->mutable_users()->add_values("foo");
 
   master::Flags flags = CreateMasterFlags();
-  flags.acls = JSON::Protobuf(acls);
+  flags.acls = acls;
 
   Try<PID<Master> > master = StartMaster(flags);
   ASSERT_SOME(master);
@@ -614,7 +614,7 @@ TEST_F(MasterAuthorizationTest, AuthorizedRole)
 
   master::Flags flags = CreateMasterFlags();
   flags.roles = "foo";
-  flags.acls = JSON::Protobuf(acls);
+  flags.acls = acls;
 
   Try<PID<Master> > master = StartMaster(flags);
   ASSERT_SOME(master);
@@ -655,7 +655,7 @@ TEST_F(MasterAuthorizationTest, UnauthorizedRole)
 
   master::Flags flags = CreateMasterFlags();
   flags.roles = "foo";
-  flags.acls = JSON::Protobuf(acls);
+  flags.acls = acls;
 
   Try<PID<Master> > master = StartMaster(flags);
   ASSERT_SOME(master);

http://git-wip-us.apache.org/repos/asf/mesos/blob/67b31904/src/tests/mesos.cpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.cpp b/src/tests/mesos.cpp
index 98a7c38..f197da6 100644
--- a/src/tests/mesos.cpp
+++ b/src/tests/mesos.cpp
@@ -102,7 +102,7 @@ master::Flags MesosTest::CreateMasterFlags()
   flags.credentials = "file://" + path;
 
   // Set default ACLs.
-  flags.acls = JSON::Object();
+  flags.acls = ACLs();
 
   // Use the replicated log (without ZooKeeper) by default.
   flags.registry = "replicated_log";