redis-gcra 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e24cc90618628f397f2ceef8e2431ad3636ec59c
4
- data.tar.gz: fd6315aa24c6e7b4bfd54e8c450bf5a819a0cd66
3
+ metadata.gz: a555bd0c5133502c4cc4c08641264cd96e298eaa
4
+ data.tar.gz: 6bd73c4a8b8ffbcf8643f56486a75ca390a22f7b
5
5
  SHA512:
6
- metadata.gz: ef79f8e1d372661b75e326f2681e966738e104f79ad3ed23eb3bfcee56ce3aab9b9bd56c27e06e78cb89bf49e143c2b2e42530478aa3cc3eb500890841947271
7
- data.tar.gz: acb1bd7728d4382922b938c595987fac6baa70cfe8776c79d39b0999fb6c8cac20ac8cf6484c4c4a74558f75e0a1a7c16f6214517f561539a1eeb5e949294d68
6
+ metadata.gz: 94425557f81dc68a91f858e6743f659c0a09e792b552b1915f16299e6a93a8c69985edd66b1ca6ff92f55c64ac728b152ba8b2826f5f4ed4f42bd99f23c59bbd
7
+ data.tar.gz: 2d6624441c79b169756c2092e22dfa5e95b5f3b38ea09ba2d8ed5c07429c32105a0324a3a0d6b347ed724d994e95dc6feaa3c4ee20dd24f08adf7a2160d84a0a
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # RedisGCRA
2
2
  [![Build Status](https://travis-ci.org/rwz/redis-gcra.svg?branch=master)](https://travis-ci.org/rwz/redis-gcra)
3
+ [![Gem Version](https://img.shields.io/gem/v/redis-gcra.svg)](https://rubygems.org/gems/redis-gcra)
3
4
 
4
5
  This gem is an implementation of [GCRA][gcra] for rate limiting based on Redis.
5
6
  The code requires Redis version 3.2 or newer since it relies on
@@ -1,3 +1,3 @@
1
1
  module RedisGCRA
2
- VERSION = "0.4.1".freeze
2
+ VERSION = "0.4.2".freeze
3
3
  end
@@ -28,7 +28,7 @@ end
28
28
  local allow_at = math.max(tat, now) - burst_offset
29
29
  local diff = now - allow_at
30
30
 
31
- local remaining = math.floor(diff / emission_interval)
31
+ local remaining = math.floor(diff / emission_interval + 0.5) -- poor's man round
32
32
 
33
33
  local reset_after = tat - now
34
34
  if reset_after == 0 then
@@ -38,7 +38,8 @@ end
38
38
  local limited
39
39
  local retry_after
40
40
 
41
- if remaining == 0 then
41
+ if remaining < 1 then
42
+ remaining = 0
42
43
  limited = 1
43
44
  retry_after = emission_interval - diff
44
45
  else
@@ -36,11 +36,12 @@ local allow_at = new_tat - burst_offset
36
36
  local diff = now - allow_at
37
37
 
38
38
  local limited
39
- local remaining
40
39
  local retry_after
41
40
  local reset_after
42
41
 
43
- if diff < 0 then
42
+ local remaining = math.floor(diff / emission_interval + 0.5) -- poor man's round
43
+
44
+ if remaining < 0 then
44
45
  limited = 1
45
46
  remaining = 0
46
47
  reset_after = tat - now
@@ -49,7 +50,6 @@ else
49
50
  limited = 0
50
51
  reset_after = new_tat - now
51
52
  redis.call("SET", rate_limit_key, new_tat, "EX", math.ceil(reset_after))
52
- remaining = math.floor(diff / emission_interval + 0.5) -- poor man's round
53
53
  retry_after = -1
54
54
  end
55
55
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-gcra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pravosud
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  version: '0'
59
59
  requirements: []
60
60
  rubyforge_project:
61
- rubygems_version: 2.6.12
61
+ rubygems_version: 2.6.11
62
62
  signing_key:
63
63
  specification_version: 4
64
64
  summary: Rate limiting based on Generic Cell Rate Algorithm