diff options
Diffstat (limited to 'vendor/gopkg.in/throttled/throttled.v2/store/redigostore')
-rw-r--r-- | vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go | 34 | ||||
-rw-r--r-- | vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go (renamed from vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go) | 4 |
2 files changed, 25 insertions, 13 deletions
diff --git a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go index 54208fa6d..03acbcab0 100644 --- a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go +++ b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go @@ -1,5 +1,5 @@ // Package redigostore offers Redis-based store implementation for throttled using redigo. -package redigostore // import "gopkg.in/throttled/throttled.v2/store/redigostore" +package redigostore // import "github.com/throttled/throttled/store/redigostore" import ( "strings" @@ -18,11 +18,7 @@ end if v ~= ARGV[1] then return 0 end -if ARGV[3] ~= "0" then - redis.call('setex', KEYS[1], ARGV[3], ARGV[2]) -else - redis.call('set', KEYS[1], ARGV[2]) -end +redis.call('setex', KEYS[1], ARGV[3], ARGV[2]) return 1 ` ) @@ -106,10 +102,17 @@ func (r *RedigoStore) SetIfNotExistsWithTTL(key string, value int64, ttl time.Du updated := v == 1 - if ttl >= time.Second { - if _, err := conn.Do("EXPIRE", key, int(ttl.Seconds())); err != nil { - return updated, err - } + ttlSeconds := int(ttl.Seconds()) + + // An `EXPIRE 0` will delete the key immediately, so make sure that we set + // expiry for a minimum of one second out so that our results stay in the + // store. + if ttlSeconds < 1 { + ttlSeconds = 1 + } + + if _, err := conn.Do("EXPIRE", key, ttlSeconds); err != nil { + return updated, err } return updated, nil @@ -128,7 +131,16 @@ func (r *RedigoStore) CompareAndSwapWithTTL(key string, old, new int64, ttl time } defer conn.Close() - swapped, err := redis.Bool(conn.Do("EVAL", redisCASScript, 1, key, old, new, int(ttl.Seconds()))) + ttlSeconds := int(ttl.Seconds()) + + // An `EXPIRE 0` will delete the key immediately, so make sure that we set + // expiry for a minimum of one second out so that our results stay in the + // store. + if ttlSeconds < 1 { + ttlSeconds = 1 + } + + swapped, err := redis.Bool(conn.Do("EVAL", redisCASScript, 1, key, old, new, ttlSeconds)) if err != nil { if strings.Contains(err.Error(), redisCASMissingKey) { return false, nil diff --git a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go index d47b635d2..ee9e2904d 100644 --- a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go +++ b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go @@ -6,8 +6,8 @@ import ( "github.com/garyburd/redigo/redis" - "gopkg.in/throttled/throttled.v2/store/redigostore" - "gopkg.in/throttled/throttled.v2/store/storetest" + "github.com/throttled/throttled/store/redigostore" + "github.com/throttled/throttled/store/storetest" ) const ( |