From 1329aa51b605cb54ba9aae3a82a0a87b881fb7b3 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 13 Nov 2017 09:09:58 -0800 Subject: Updating server dependancies. (#7816) --- .../throttled.v2/store/redigostore/redigostore.go | 34 +++++++++++++++------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go') 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 -- cgit v1.2.3-1-g7c22