You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mh...@apache.org on 2019/05/03 23:13:13 UTC
[incubator-openwhisk-apigateway] branch master updated: Add retry
logic to redis queries (#339)
This is an automated email from the ASF dual-hosted git repository.
mhamann pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-apigateway.git
The following commit(s) were added to refs/heads/master by this push:
new cf9bd9a Add retry logic to redis queries (#339)
cf9bd9a is described below
commit cf9bd9a36ee99a6d3863d79b2e35f696b612b296
Author: Alex Song <so...@us.ibm.com>
AuthorDate: Fri May 3 19:13:08 2019 -0400
Add retry logic to redis queries (#339)
---
scripts/lua/lib/redis.lua | 39 ++++++++++++++++++++++++++-------------
1 file changed, 26 insertions(+), 13 deletions(-)
diff --git a/scripts/lua/lib/redis.lua b/scripts/lua/lib/redis.lua
index b847917..bd6701f 100644
--- a/scripts/lua/lib/redis.lua
+++ b/scripts/lua/lib/redis.lua
@@ -48,7 +48,8 @@ if CACHING_ENABLED then
end
-local REDIS_RETRY_COUNT = os.getenv('REDIS_RETRY_COUNT') or 4
+local REDIS_RETRY_COUNT = os.getenv('REDIS_RETRY_COUNT')
+REDIS_RETRY_COUNT = REDIS_RETRY_COUNT == nil and 3 or tonumber(REDIS_RETRY_COUNT)
local REDIS_FIELD = "resources"
local _M = {}
@@ -656,7 +657,7 @@ function exists(red, key, snapshotId)
if red == nil then
red = _M.init()
end
- return red:exists(key), red
+ return call(red.exists, {red, key}), red
end
end
@@ -677,7 +678,7 @@ function get(red, key)
if red == nil then
red = _M.init()
end
- return red:get(key)
+ return call(red.get, {red, key})
end
end
@@ -711,12 +712,12 @@ function hget(red, key, id)
if red == nil then
red = _M.init()
end
- return red:hget(key, id), red
+ return call(red.hget, {red, key, id}), red
end
end
function hgetall(red, key)
- return red:hgetall(key)
+ return call(red.hgetall, {red, key})
end
function hset(red, key, id, value)
@@ -732,7 +733,7 @@ function hset(red, key, id, value)
c:set(key, val, CACHE_TTL)
end
end
- return red:hset(key, id, value)
+ return call(red.hset, {red, key, id, value})
end
function expire(red, key, ttl)
@@ -744,14 +745,14 @@ function expire(red, key, ttl)
end
c:set(key, value, ttl)
end
- return red:expire(key, ttl)
+ return call(red.expire, {red, ttl})
end
function del(red, key)
if CACHING_ENABLED then
c:delete(key)
end
- return red:del(key)
+ return call(red.del, {red, key})
end
function hdel(red, key, id)
@@ -762,25 +763,37 @@ function hdel(red, key, id)
c:set(key, cachecontents, CACHE_TTL)
end
end
- return red:hdel(key, id)
+ return call(red.hdel, {red, key, id})
end
function set(red, key, value)
- return red:set(key, value)
+ return call(red.set, {red, key, value})
end
function smembers(red, key)
- return red:smembers(key)
+ return call(red.smembers, {red, key})
end
function srem(red, key, id)
- return red:srem(key, id)
+ return call(red.srem, {red, key, id})
end
function sadd(red, key, id)
- return red:sadd(key, id)
+ return call(red.sadd, {red, key, id})
end
+--- Call function with retry logic
+-- @param func function to call
+-- @param args arguments to pass in to function
+function call(func, args)
+ local res, err = func(unpack(args))
+ local retryCount = REDIS_RETRY_COUNT
+ while not res and retryCount > 0 do
+ res, err = func(unpack(args))
+ retryCount = retryCount - 1
+ end
+ return res, err
+end
_M.get = get
_M.set = set