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 ++++++--- .../store/redigostore/redigostore_test.go | 85 ++++++++++++++++++++++ .../store/redigostore/redisstore_test.go | 85 ---------------------- 3 files changed, 108 insertions(+), 96 deletions(-) create mode 100644 vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go delete mode 100644 vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go (limited to 'vendor/gopkg.in/throttled/throttled.v2/store/redigostore') 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/redigostore_test.go b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go new file mode 100644 index 000000000..ee9e2904d --- /dev/null +++ b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore_test.go @@ -0,0 +1,85 @@ +package redigostore_test + +import ( + "testing" + "time" + + "github.com/garyburd/redigo/redis" + + "github.com/throttled/throttled/store/redigostore" + "github.com/throttled/throttled/store/storetest" +) + +const ( + redisTestDB = 1 + redisTestPrefix = "throttled:" +) + +func getPool() *redis.Pool { + pool := &redis.Pool{ + MaxIdle: 3, + IdleTimeout: 30 * time.Second, + Dial: func() (redis.Conn, error) { + return redis.Dial("tcp", ":6379") + }, + TestOnBorrow: func(c redis.Conn, t time.Time) error { + _, err := c.Do("PING") + return err + }, + } + return pool +} + +func TestRedisStore(t *testing.T) { + c, st := setupRedis(t, 0) + defer c.Close() + defer clearRedis(c) + + clearRedis(c) + storetest.TestGCRAStore(t, st) + storetest.TestGCRAStoreTTL(t, st) +} + +func BenchmarkRedisStore(b *testing.B) { + c, st := setupRedis(b, 0) + defer c.Close() + defer clearRedis(c) + + storetest.BenchmarkGCRAStore(b, st) +} + +func clearRedis(c redis.Conn) error { + keys, err := redis.Values(c.Do("KEYS", redisTestPrefix+"*")) + if err != nil { + return err + } + + if _, err := redis.Int(c.Do("DEL", keys...)); err != nil { + return err + } + + return nil +} + +func setupRedis(tb testing.TB, ttl time.Duration) (redis.Conn, *redigostore.RedigoStore) { + pool := getPool() + c := pool.Get() + + if _, err := redis.String(c.Do("PING")); err != nil { + c.Close() + tb.Skip("redis server not available on localhost port 6379") + } + + if _, err := redis.String(c.Do("SELECT", redisTestDB)); err != nil { + c.Close() + tb.Fatal(err) + } + + st, err := redigostore.New(pool, redisTestPrefix, redisTestDB) + if err != nil { + c.Close() + tb.Fatal(err) + } + + return c, st +} diff --git a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go b/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go deleted file mode 100644 index d47b635d2..000000000 --- a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redisstore_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package redigostore_test - -import ( - "testing" - "time" - - "github.com/garyburd/redigo/redis" - - "gopkg.in/throttled/throttled.v2/store/redigostore" - "gopkg.in/throttled/throttled.v2/store/storetest" -) - -const ( - redisTestDB = 1 - redisTestPrefix = "throttled:" -) - -func getPool() *redis.Pool { - pool := &redis.Pool{ - MaxIdle: 3, - IdleTimeout: 30 * time.Second, - Dial: func() (redis.Conn, error) { - return redis.Dial("tcp", ":6379") - }, - TestOnBorrow: func(c redis.Conn, t time.Time) error { - _, err := c.Do("PING") - return err - }, - } - return pool -} - -func TestRedisStore(t *testing.T) { - c, st := setupRedis(t, 0) - defer c.Close() - defer clearRedis(c) - - clearRedis(c) - storetest.TestGCRAStore(t, st) - storetest.TestGCRAStoreTTL(t, st) -} - -func BenchmarkRedisStore(b *testing.B) { - c, st := setupRedis(b, 0) - defer c.Close() - defer clearRedis(c) - - storetest.BenchmarkGCRAStore(b, st) -} - -func clearRedis(c redis.Conn) error { - keys, err := redis.Values(c.Do("KEYS", redisTestPrefix+"*")) - if err != nil { - return err - } - - if _, err := redis.Int(c.Do("DEL", keys...)); err != nil { - return err - } - - return nil -} - -func setupRedis(tb testing.TB, ttl time.Duration) (redis.Conn, *redigostore.RedigoStore) { - pool := getPool() - c := pool.Get() - - if _, err := redis.String(c.Do("PING")); err != nil { - c.Close() - tb.Skip("redis server not available on localhost port 6379") - } - - if _, err := redis.String(c.Do("SELECT", redisTestDB)); err != nil { - c.Close() - tb.Fatal(err) - } - - st, err := redigostore.New(pool, redisTestPrefix, redisTestDB) - if err != nil { - c.Close() - tb.Fatal(err) - } - - return c, st -} -- cgit v1.2.3-1-g7c22