You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ya...@apache.org on 2014/06/23 20:25:48 UTC

[5/6] git commit: Added flags::parse() overload for RateLimits protobuf.

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

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


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

Branch: refs/heads/master
Commit: 1cd0a072d9dafe8d6835ec02afca13b0124cae8c
Parents: ac44eb5
Author: Jiang Yan Xu <ya...@jxu.me>
Authored: Wed Jun 18 13:39:59 2014 -0700
Committer: Jiang Yan Xu <ya...@jxu.me>
Committed: Mon Jun 23 11:19:40 2014 -0700

----------------------------------------------------------------------
 src/common/parse.hpp              | 14 ++++++++++++++
 src/common/type_utils.hpp         |  8 ++++++++
 src/master/flags.hpp              |  2 +-
 src/master/master.cpp             | 10 +---------
 src/tests/rate_limiting_tests.cpp |  6 +++---
 5 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1cd0a072/src/common/parse.hpp
----------------------------------------------------------------------
diff --git a/src/common/parse.hpp b/src/common/parse.hpp
index 5b12e38..4eb5096 100644
--- a/src/common/parse.hpp
+++ b/src/common/parse.hpp
@@ -38,6 +38,20 @@ inline Try<mesos::ACLs> parse(const std::string& value)
   return protobuf::parse<mesos::ACLs>(json.get());
 }
 
+
+template<>
+inline Try<mesos::RateLimits> 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::RateLimits>(json.get());
+}
+
 } // namespace flags {
 
 #endif // __COMMON_PARSE_HPP__

http://git-wip-us.apache.org/repos/asf/mesos/blob/1cd0a072/src/common/type_utils.hpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.hpp b/src/common/type_utils.hpp
index 27ea4d2..bb357ac 100644
--- a/src/common/type_utils.hpp
+++ b/src/common/type_utils.hpp
@@ -122,6 +122,14 @@ inline std::ostream& operator << (
 }
 
 
+inline std::ostream& operator << (
+    std::ostream& stream,
+    const RateLimits& limits)
+{
+  return stream << limits.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/1cd0a072/src/master/flags.hpp
----------------------------------------------------------------------
diff --git a/src/master/flags.hpp b/src/master/flags.hpp
index 47bb0dc..70751d2 100644
--- a/src/master/flags.hpp
+++ b/src/master/flags.hpp
@@ -287,7 +287,7 @@ public:
   bool authenticate_slaves;
   Option<std::string> credentials;
   Option<ACLs> acls;
-  Option<JSON::Object> rate_limits;
+  Option<RateLimits> rate_limits;
 };
 
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/1cd0a072/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 72470da..f376e60 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -46,7 +46,6 @@
 #include <stout/option.hpp>
 #include <stout/os.hpp>
 #include <stout/path.hpp>
-#include <stout/protobuf.hpp>
 #include <stout/stringify.hpp>
 #include <stout/utils.hpp>
 #include <stout/uuid.hpp>
@@ -355,15 +354,8 @@ void Master::initialize()
   }
 
   if (flags.rate_limits.isSome()) {
-    Try<RateLimits> limits =
-      ::protobuf::parse<RateLimits>(flags.rate_limits.get());
-    if (limits.isError()) {
-      EXIT(1) << "Invalid RateLimits format: " << limits.error()
-              << " (see --rate_limits flag)";
-    }
-
     // Add framework rate limiters.
-    foreach (const RateLimit& limit_, limits.get().limits()) {
+    foreach (const RateLimit& limit_, flags.rate_limits.get().limits()) {
       if (limiters.contains(limit_.principal())) {
         EXIT(1) << "Duplicate principal " << limit_.principal()
                 << " found in RateLimits configuration";

http://git-wip-us.apache.org/repos/asf/mesos/blob/1cd0a072/src/tests/rate_limiting_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/rate_limiting_tests.cpp b/src/tests/rate_limiting_tests.cpp
index 9775b77..9cb3717 100644
--- a/src/tests/rate_limiting_tests.cpp
+++ b/src/tests/rate_limiting_tests.cpp
@@ -88,7 +88,7 @@ public:
     // metrics endpoint (because it also throttles requests but at
     // 2qps) don't mess with framework rate limiting.
     limit->set_qps(1);
-    flags.rate_limits = JSON::Protobuf(limits);
+    flags.rate_limits = limits;
 
     return flags;
   }
@@ -106,7 +106,7 @@ TEST_F(RateLimitingTest, NoRateLimiting)
   RateLimits limits;
   RateLimit* limit = limits.mutable_limits()->Add();
   limit->set_principal(DEFAULT_CREDENTIAL.principal());
-  flags.rate_limits = JSON::Protobuf(limits);
+  flags.rate_limits = limits;
 
   Try<PID<Master> > master = StartMaster(flags);
   ASSERT_SOME(master);
@@ -363,7 +363,7 @@ TEST_F(RateLimitingTest, DifferentPrincipalFrameworks)
   RateLimit* limit2 = limits.mutable_limits()->Add();
   limit2->set_principal("framework2");
   limit2->set_qps(0.5);
-  flags.rate_limits = JSON::Protobuf(limits);
+  flags.rate_limits = limits;
 
   flags.authenticate_frameworks = false;