-
Notifications
You must be signed in to change notification settings - Fork 11
Description
I created a limiter like this:
self.limiterGlobal = ratelimiter.NewDefaultLimiter(10, time.Minute)
And in the middleware of my HTTP server I am doing this:
allowed, _ = self.limiterGlobal.ShouldAllow(1)
// if allowed return HTTP200, otherwise HTTP429
Then I fired curl
requests in a loop in the console, with 1s pause.
Expected result:
It will allow the first 10 requests, then block further requests until 1 minute has passed, then every second another request will be allowed.
Actual result:
---------
Di 1. Nov 14:47:23 CET 2022
200
---------
Di 1. Nov 14:47:24 CET 2022
200
---------
Di 1. Nov 14:47:25 CET 2022
200
---------
Di 1. Nov 14:47:26 CET 2022
200
---------
Di 1. Nov 14:47:27 CET 2022
200
---------
Di 1. Nov 14:47:28 CET 2022
200
---------
Di 1. Nov 14:47:29 CET 2022
200
---------
Di 1. Nov 14:47:30 CET 2022
200
---------
Di 1. Nov 14:47:31 CET 2022
200
---------
Di 1. Nov 14:47:32 CET 2022
200
---------
Di 1. Nov 14:47:33 CET 2022
429
---------
Di 1. Nov 14:47:34 CET 2022
429
---------
Di 1. Nov 14:47:35 CET 2022
429
---------
Di 1. Nov 14:47:36 CET 2022
429
---------
Di 1. Nov 14:47:37 CET 2022
429
---------
Di 1. Nov 14:47:38 CET 2022
429
---------
Di 1. Nov 14:47:39 CET 2022
429
---------
Di 1. Nov 14:47:40 CET 2022
429
---------
Di 1. Nov 14:47:41 CET 2022
429
---------
Di 1. Nov 14:47:42 CET 2022
429
---------
Di 1. Nov 14:47:43 CET 2022
429
---------
Di 1. Nov 14:47:44 CET 2022
429
---------
Di 1. Nov 14:47:45 CET 2022
429
---------
Di 1. Nov 14:47:46 CET 2022
429
---------
Di 1. Nov 14:47:47 CET 2022
429
---------
Di 1. Nov 14:47:48 CET 2022
429
---------
Di 1. Nov 14:47:49 CET 2022
429
---------
Di 1. Nov 14:47:51 CET 2022
429
---------
Di 1. Nov 14:47:52 CET 2022
429
---------
Di 1. Nov 14:47:53 CET 2022
429
---------
Di 1. Nov 14:47:54 CET 2022
429
---------
Di 1. Nov 14:47:55 CET 2022
429
---------
Di 1. Nov 14:47:56 CET 2022
429
---------
Di 1. Nov 14:47:57 CET 2022
429
---------
Di 1. Nov 14:47:58 CET 2022
429
---------
Di 1. Nov 14:47:59 CET 2022
429
---------
Di 1. Nov 14:48:00 CET 2022
429
---------
Di 1. Nov 14:48:01 CET 2022
429
---------
Di 1. Nov 14:48:02 CET 2022
429
---------
Di 1. Nov 14:48:03 CET 2022
429
---------
Di 1. Nov 14:48:04 CET 2022
429
---------
Di 1. Nov 14:48:05 CET 2022
429
---------
Di 1. Nov 14:48:06 CET 2022
429
---------
Di 1. Nov 14:48:07 CET 2022
429
---------
Di 1. Nov 14:48:08 CET 2022
429
---------
Di 1. Nov 14:48:09 CET 2022
429
---------
Di 1. Nov 14:48:10 CET 2022
429
---------
Di 1. Nov 14:48:11 CET 2022
429
---------
Di 1. Nov 14:48:12 CET 2022
429
---------
Di 1. Nov 14:48:13 CET 2022
429
---------
Di 1. Nov 14:48:14 CET 2022
429
---------
Di 1. Nov 14:48:15 CET 2022
429
---------
Di 1. Nov 14:48:16 CET 2022
429
---------
Di 1. Nov 14:48:17 CET 2022
429
---------
Di 1. Nov 14:48:18 CET 2022
429
---------
Di 1. Nov 14:48:19 CET 2022
429
---------
Di 1. Nov 14:48:20 CET 2022
200
---------
Di 1. Nov 14:48:21 CET 2022
429
---------
Di 1. Nov 14:48:22 CET 2022
429
---------
Di 1. Nov 14:48:23 CET 2022
429
---------
Di 1. Nov 14:48:24 CET 2022
429
---------
Di 1. Nov 14:48:25 CET 2022
429
---------
Di 1. Nov 14:48:26 CET 2022
200
---------
Di 1. Nov 14:48:27 CET 2022
429
---------
Di 1. Nov 14:48:28 CET 2022
429
---------
Di 1. Nov 14:48:29 CET 2022
429
---------
Di 1. Nov 14:48:30 CET 2022
429
---------
Di 1. Nov 14:48:31 CET 2022
429
---------
Di 1. Nov 14:48:33 CET 2022
200
---------
Di 1. Nov 14:48:34 CET 2022
429
---------
Di 1. Nov 14:48:35 CET 2022
429
---------
Di 1. Nov 14:48:36 CET 2022
429
---------
Di 1. Nov 14:48:37 CET 2022
429
---------
Di 1. Nov 14:48:38 CET 2022
429
---------
Di 1. Nov 14:48:39 CET 2022
200
---------
Di 1. Nov 14:48:40 CET 2022
429
---------
Di 1. Nov 14:48:41 CET 2022
429
---------
Di 1. Nov 14:48:42 CET 2022
429
---------
Di 1. Nov 14:48:43 CET 2022
429
---------
Di 1. Nov 14:48:44 CET 2022
429
---------
Di 1. Nov 14:48:45 CET 2022
200
---------
Di 1. Nov 14:48:46 CET 2022
429
---------
Di 1. Nov 14:48:47 CET 2022
429
---------
Di 1. Nov 14:48:48 CET 2022
429
---------
Di 1. Nov 14:48:49 CET 2022
429
---------
Di 1. Nov 14:48:50 CET 2022
429
---------
Di 1. Nov 14:48:51 CET 2022
200
You can see that indeed the first 10 requests are allowed, and subsequent requests are blocked. However, a single new request is allowed at 14:48:20, which is only 57s after the first request. That means, that at this point 11 requests within 60s had been allowed. Now further requests got blocked again, with the next request allowed at 14:48:26 (63s after first request). This could be okay (taking into account the false-allowed at 14:48:20). Then again requests are blocked until at 14:48:33, which is seven seconds later.
Maybe I have a misunderstanding here, but I thought that if e.g. the current time is 14:48:30, the limiter would count the requests during the last 60 seconds (= 14:47:30 - 14:48:30), and in case the count is less than 10, the request would be allowed. In my example the number of requests in the timerange 14:47:30 - 14:48:30 is 5, so at 14:48:30 a request should be allowed, which is not the case.
Could you maybe explain the intended behaviour of the limiter? Maybe I understood something wrong here. Thanks!