[ https://issues.apache.org/jira/browse/HBASE-13686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14543933#comment-14543933 ]
Matteo Bertozzi commented on HBASE-13686: ----------------------------------------- in your code, shouldn't now be updated after thread.sleep()? also, did you see how the RateLimiter is used inside TestRateLimiter and TimeBasedLimiter? why are you using it directly? > Fail to limit rate in RateLimiter > --------------------------------- > > Key: HBASE-13686 > URL: https://issues.apache.org/jira/browse/HBASE-13686 > Project: HBase > Issue Type: Bug > Affects Versions: 2.0.0, 1.1.0 > Reporter: Guanghao Zhang > Priority: Minor > > While using the patch in HBASE-11598 , I found that RateLimiter can't to > limit the rate right. > {code} > /** > * given the time interval, are there enough available resources to allow > execution? > * @param now the current timestamp > * @param lastTs the timestamp of the last update > * @param amount the number of required resources > * @return true if there are enough available resources, otherwise false > */ > public synchronized boolean canExecute(final long now, final long lastTs, > final long amount) { > return avail >= amount ? true : refill(now, lastTs) >= amount; > } > {code} > When avail >= amount, avail can't be refill. But in the next time to call > canExecute, lastTs maybe update. So avail will waste some time to refill. > Even we use smaller rate than the limit, the canExecute will return false. -- This message was sent by Atlassian JIRA (v6.3.4#6332)