hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matteo Bertozzi (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-13686) Fail to limit rate in RateLimiter
Date Thu, 14 May 2015 16:38:00 GMT

    [ https://issues.apache.org/jira/browse/HBASE-13686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14543971#comment-14543971
] 

Matteo Bertozzi commented on HBASE-13686:
-----------------------------------------

{quote}1. In my code, now will be updated in every request. This code is just for test shortly.{quote}
yeah, you update now at the beginning of the for loop, but you pass lastTs to the checkExecute()
and lastTs was not updated with the sleep time (you should update now with sleep time before
assigning now to lastTs at the end of the for) otherwise your check is against an old time
that does not include your sleep, so that will not refill, because for the RateLimiter you
didn't do a sleep

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

Mime
View raw message