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/17 23:10:41 UTC

[5/5] git commit: Changed RateLimiter to work directly with 'double permitsPerSecond'.

Changed RateLimiter to work directly with 'double permitsPerSecond'.

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


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

Branch: refs/heads/master
Commit: 4a0b34907bdc83f46b3cf61d7578b6939c296834
Parents: d19e588
Author: Jiang Yan Xu <ya...@jxu.me>
Authored: Mon Jun 9 14:42:56 2014 -0700
Committer: Jiang Yan Xu <ya...@jxu.me>
Committed: Tue Jun 17 14:10:20 2014 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/include/process/limiter.hpp | 30 ++++++++++++++------
 1 file changed, 22 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/4a0b3490/3rdparty/libprocess/include/process/limiter.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/include/process/limiter.hpp b/3rdparty/libprocess/include/process/limiter.hpp
index bbe8226..846ec09 100644
--- a/3rdparty/libprocess/include/process/limiter.hpp
+++ b/3rdparty/libprocess/include/process/limiter.hpp
@@ -5,6 +5,7 @@
 
 #include <process/delay.hpp>
 #include <process/dispatch.hpp>
+#include <process/id.hpp>
 #include <process/future.hpp>
 #include <process/process.hpp>
 #include <process/timeout.hpp>
@@ -29,6 +30,7 @@ class RateLimiter
 {
 public:
   RateLimiter(int permits, const Duration& duration);
+  explicit RateLimiter(double permitsPerSecond);
   ~RateLimiter();
 
   // Returns a future that becomes ready when the permit is acquired.
@@ -46,11 +48,19 @@ private:
 class RateLimiterProcess : public Process<RateLimiterProcess>
 {
 public:
-  RateLimiterProcess(int _permits, const Duration& _duration)
-    : permits(_permits), duration(_duration)
+  RateLimiterProcess(int permits, const Duration& duration)
+    : ProcessBase(ID::generate("__limiter__"))
   {
     CHECK_GT(permits, 0);
     CHECK_GT(duration.secs(), 0);
+    permitsPerSecond = permits / duration.secs();
+  }
+
+  explicit RateLimiterProcess(double _permitsPerSecond)
+    : ProcessBase(ID::generate("__limiter__")),
+      permitsPerSecond(_permitsPerSecond)
+  {
+    CHECK_GT(permitsPerSecond, 0);
   }
 
   virtual void finalize()
@@ -78,8 +88,7 @@ public:
     }
 
     // No need to wait!
-    double rate = permits / duration.secs();
-    timeout = Seconds(1) / rate;
+    timeout = Seconds(1) / permitsPerSecond;
     return Nothing();
   }
 
@@ -97,8 +106,7 @@ private:
 
     promise->set(Nothing());
 
-    double rate = permits / duration.secs();
-    timeout = Seconds(1) / rate;
+    timeout = Seconds(1) / permitsPerSecond;
 
     // Repeat if necessary.
     if (!promises.empty()) {
@@ -106,8 +114,7 @@ private:
     }
   }
 
-  const int permits;
-  const Duration duration;
+  double permitsPerSecond;
 
   Timeout timeout;
 
@@ -122,6 +129,13 @@ inline RateLimiter::RateLimiter(int permits, const Duration& duration)
 }
 
 
+inline RateLimiter::RateLimiter(double permitsPerSecond)
+{
+  process = new RateLimiterProcess(permitsPerSecond);
+  spawn(process);
+}
+
+
 inline RateLimiter::~RateLimiter()
 {
   terminate(process);