You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Guanghao Zhang (JIRA)" <ji...@apache.org> on 2015/06/11 15:32:01 UTC
[jira] [Created] (HBASE-13888) refill bug from HBASE-13686
Guanghao Zhang created HBASE-13888:
--------------------------------------
Summary: refill bug from HBASE-13686
Key: HBASE-13888
URL: https://issues.apache.org/jira/browse/HBASE-13888
Project: HBase
Issue Type: Bug
Affects Versions: 2.0.0
Reporter: Guanghao Zhang
Assignee: Guanghao Zhang
As I report the RateLimiter fail to limit in HBASE-13686, then [~ashish singhi] fix that problem by support two kinds of RateLimiter: AverageIntervalRateLimiter and FixedIntervalRateLimiter. But in my use of the code, I found a new bug about refill() in AverageIntervalRateLimiter.
{code}
long delta = (limit * (now - nextRefillTime)) / super.getTimeUnitInMillis();
if (delta > 0) {
this.nextRefillTime = now;
return Math.min(limit, available + delta);
}
{code}
When delta > 0, refill maybe return available + delta. Then in the canExecute(), avail will add refillAmount again. So the new avail maybe 2 * avail + delta.
{code}
long refillAmount = refill(limit, avail);
if (refillAmount == 0 && avail < amount) {
return false;
}
// check for positive overflow
if (avail <= Long.MAX_VALUE - refillAmount) {
avail = Math.max(0, Math.min(avail + refillAmount, limit));
} else {
avail = Math.max(0, limit);
}
{code}
I will add more unit tests for RateLimiter in the next days.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)