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);