From 6e2cb00008cbf09e556b00f87603797fcaa47e09 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 16 Apr 2018 05:37:14 -0700 Subject: Depenancy upgrades and movign to dep. (#8630) --- .../throttled.v2/store/redigostore/redigostore.go | 168 --------------------- 1 file changed, 168 deletions(-) delete mode 100644 vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go (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 deleted file mode 100644 index 03acbcab0..000000000 --- a/vendor/gopkg.in/throttled/throttled.v2/store/redigostore/redigostore.go +++ /dev/null @@ -1,168 +0,0 @@ -// Package redigostore offers Redis-based store implementation for throttled using redigo. -package redigostore // import "github.com/throttled/throttled/store/redigostore" - -import ( - "strings" - "time" - - "github.com/garyburd/redigo/redis" -) - -const ( - redisCASMissingKey = "key does not exist" - redisCASScript = ` -local v = redis.call('get', KEYS[1]) -if v == false then - return redis.error_reply("key does not exist") -end -if v ~= ARGV[1] then - return 0 -end -redis.call('setex', KEYS[1], ARGV[3], ARGV[2]) -return 1 -` -) - -// RedigoStore implements a Redis-based store using redigo. -type RedigoStore struct { - pool *redis.Pool - prefix string - db int -} - -// New creates a new Redis-based store, using the provided pool to get -// its connections. The keys will have the specified keyPrefix, which -// may be an empty string, and the database index specified by db will -// be selected to store the keys. Any updating operations will reset -// the key TTL to the provided value rounded down to the nearest -// second. Depends on Redis 2.6+ for EVAL support. -func New(pool *redis.Pool, keyPrefix string, db int) (*RedigoStore, error) { - return &RedigoStore{ - pool: pool, - prefix: keyPrefix, - db: db, - }, nil -} - -// GetWithTime returns the value of the key if it is in the store -// or -1 if it does not exist. It also returns the current time at -// the redis server to microsecond precision. -func (r *RedigoStore) GetWithTime(key string) (int64, time.Time, error) { - var now time.Time - - key = r.prefix + key - - conn, err := r.getConn() - if err != nil { - return 0, now, err - } - defer conn.Close() - - conn.Send("TIME") - conn.Send("GET", key) - conn.Flush() - timeReply, err := redis.Values(conn.Receive()) - if err != nil { - return 0, now, err - } - - var s, us int64 - if _, err := redis.Scan(timeReply, &s, &us); err != nil { - return 0, now, err - } - now = time.Unix(s, us*int64(time.Microsecond)) - - v, err := redis.Int64(conn.Receive()) - if err == redis.ErrNil { - return -1, now, nil - } else if err != nil { - return 0, now, err - } - - return v, now, nil -} - -// SetIfNotExistsWithTTL sets the value of key only if it is not -// already set in the store it returns whether a new value was set. -// If a new value was set, the ttl in the key is also set, though this -// operation is not performed atomically. -func (r *RedigoStore) SetIfNotExistsWithTTL(key string, value int64, ttl time.Duration) (bool, error) { - key = r.prefix + key - - conn, err := r.getConn() - if err != nil { - return false, err - } - defer conn.Close() - - v, err := redis.Int64(conn.Do("SETNX", key, value)) - if err != nil { - return false, err - } - - updated := v == 1 - - 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 -} - -// CompareAndSwapWithTTL atomically compares the value at key to the -// old value. If it matches, it sets it to the new value and returns -// true. Otherwise, it returns false. If the key does not exist in the -// store, it returns false with no error. If the swap succeeds, the -// ttl for the key is updated atomically. -func (r *RedigoStore) CompareAndSwapWithTTL(key string, old, new int64, ttl time.Duration) (bool, error) { - key = r.prefix + key - conn, err := r.getConn() - if err != nil { - return false, err - } - defer conn.Close() - - 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 - } - - return false, err - } - - return swapped, nil -} - -// Select the specified database index. -func (r *RedigoStore) getConn() (redis.Conn, error) { - conn := r.pool.Get() - - // Select the specified database - if r.db > 0 { - if _, err := redis.String(conn.Do("SELECT", r.db)); err != nil { - conn.Close() - return nil, err - } - } - - return conn, nil -} -- cgit v1.2.3-1-g7c22