From 551a85c1e6abd00a9ee7a585a306ae47085996d4 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Thu, 1 Oct 2020 16:09:03 -0400 Subject: [PATCH] Use named variables instead of referring to KEYS/ARGV array indices in message cache scripts. --- service/src/main/resources/lua/get_items.lua | 9 ++--- .../resources/lua/get_queues_to_persist.lua | 9 ++--- .../src/main/resources/lua/insert_item.lua | 34 ++++++++++--------- .../resources/lua/remove_item_by_guid.lua | 25 +++++++------- .../main/resources/lua/remove_item_by_id.lua | 26 +++++++------- .../resources/lua/remove_item_by_sender.lua | 26 +++++++------- .../src/main/resources/lua/remove_queue.lua | 10 +++--- 7 files changed, 75 insertions(+), 64 deletions(-) diff --git a/service/src/main/resources/lua/get_items.lua b/service/src/main/resources/lua/get_items.lua index 7a966d039..624e33fe4 100644 --- a/service/src/main/resources/lua/get_items.lua +++ b/service/src/main/resources/lua/get_items.lua @@ -1,10 +1,11 @@ --- keys: queue_key, queue_locked_key --- argv: limit +local queueKey = KEYS[1] +local queueLockKey = KEYS[2] +local limit = ARGV[1] -local locked = redis.call("GET", KEYS[2]) +local locked = redis.call("GET", queueLockKey) if locked then return {} end -return redis.call("ZRANGE", KEYS[1], 0, ARGV[1], "WITHSCORES") \ No newline at end of file +return redis.call("ZRANGE", queueKey, 0, limit, "WITHSCORES") diff --git a/service/src/main/resources/lua/get_queues_to_persist.lua b/service/src/main/resources/lua/get_queues_to_persist.lua index b4afdaf43..97f9793ab 100644 --- a/service/src/main/resources/lua/get_queues_to_persist.lua +++ b/service/src/main/resources/lua/get_queues_to_persist.lua @@ -1,10 +1,11 @@ --- keys: queue_total_index --- argv: max_time, limit +local queueTotalIndexKey = KEYS[1] +local maxTime = ARGV[1] +local limit = ARGV[2] -local results = redis.call("ZRANGEBYSCORE", KEYS[1], 0, ARGV[1], "LIMIT", 0, ARGV[2]) +local results = redis.call("ZRANGEBYSCORE", queueTotalIndexKey, 0, maxTime, "LIMIT", 0, limit) if results and next(results) then - redis.call("ZREM", KEYS[1], unpack(results)) + redis.call("ZREM", queueTotalIndexKey, unpack(results)) end return results diff --git a/service/src/main/resources/lua/insert_item.lua b/service/src/main/resources/lua/insert_item.lua index e7ab2f0d1..0878e4ab1 100644 --- a/service/src/main/resources/lua/insert_item.lua +++ b/service/src/main/resources/lua/insert_item.lua @@ -1,24 +1,26 @@ --- keys: queue_key [1], queue_metadata_key [2], queue_total_index [3] --- argv: message [1], current_time [2], sender (possibly null) [3], guid [4], messageId (possibly null) [5] +local queueKey = KEYS[1] +local queueMetadataKey = KEYS[2] +local queueTotalIndexKey = KEYS[3] +local message = ARGV[1] +local currentTime = ARGV[2] +local sender = ARGV[3] +local guid = ARGV[4] -local messageId = redis.call("HINCRBY", KEYS[2], "counter", 1) +local messageId = redis.call("HINCRBY", queueMetadataKey, "counter", 1) -redis.call("ZADD", KEYS[1], "NX", messageId, ARGV[1]) +redis.call("ZADD", queueKey, "NX", messageId, message) -if ARGV[3] ~= "nil" then - redis.call("HSET", KEYS[2], ARGV[3], messageId) +if sender ~= "nil" then + redis.call("HSET", queueMetadataKey, sender, messageId) + redis.call("HSET", queueMetadataKey, messageId, sender) end -redis.call("HSET", KEYS[2], ARGV[4], messageId) +redis.call("HSET", queueMetadataKey, guid, messageId) -if ARGV[3] ~= "nil" then - redis.call("HSET", KEYS[2], messageId, ARGV[3]) -end +redis.call("HSET", queueMetadataKey, messageId .. "guid", guid) -redis.call("HSET", KEYS[2], messageId .. "guid", ARGV[4]) +redis.call("EXPIRE", queueKey, 7776000) -- 90 days +redis.call("EXPIRE", queueMetadataKey, 7776000) -- 90 days -redis.call("EXPIRE", KEYS[1], 7776000) -redis.call("EXPIRE", KEYS[2], 7776000) - -redis.call("ZADD", KEYS[3], "NX", ARGV[2], KEYS[1]) -return messageId \ No newline at end of file +redis.call("ZADD", queueTotalIndexKey, "NX", currentTime, queueKey) +return messageId diff --git a/service/src/main/resources/lua/remove_item_by_guid.lua b/service/src/main/resources/lua/remove_item_by_guid.lua index 0c0345046..7755f20bd 100644 --- a/service/src/main/resources/lua/remove_item_by_guid.lua +++ b/service/src/main/resources/lua/remove_item_by_guid.lua @@ -1,26 +1,27 @@ --- keys: queue_key, queue_metadata_key, queue_index --- argv: guid_to_remove +local queueKey = KEYS[1] +local queueMetadataKey = KEYS[2] +local queueTotalIndexKey = KEYS[3] local removedMessages = {} for _, guid in ipairs(ARGV) do - local messageId = redis.call("HGET", KEYS[2], guid) + local messageId = redis.call("HGET", queueMetadataKey, guid) if messageId then - local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], messageId, messageId, "LIMIT", 0, 1) - local sender = redis.call("HGET", KEYS[2], messageId) + local envelope = redis.call("ZRANGEBYSCORE", queueKey, messageId, messageId, "LIMIT", 0, 1) + local sender = redis.call("HGET", queueMetadataKey, messageId) - redis.call("ZREMRANGEBYSCORE", KEYS[1], messageId, messageId) - redis.call("HDEL", KEYS[2], guid) - redis.call("HDEL", KEYS[2], messageId .. "guid") + redis.call("ZREMRANGEBYSCORE", queueKey, messageId, messageId) + redis.call("HDEL", queueMetadataKey, guid) + redis.call("HDEL", queueMetadataKey, messageId .. "guid") if sender then - redis.call("HDEL", KEYS[2], sender) - redis.call("HDEL", KEYS[2], messageId) + redis.call("HDEL", queueMetadataKey, sender) + redis.call("HDEL", queueMetadataKey, messageId) end - if (redis.call("ZCARD", KEYS[1]) == 0) then - redis.call("ZREM", KEYS[3], KEYS[1]) + if (redis.call("ZCARD", queueKey) == 0) then + redis.call("ZREM", queueTotalIndexKey, queueKey) end if envelope and next(envelope) then diff --git a/service/src/main/resources/lua/remove_item_by_id.lua b/service/src/main/resources/lua/remove_item_by_id.lua index d9769dfd0..c8bc41f30 100644 --- a/service/src/main/resources/lua/remove_item_by_id.lua +++ b/service/src/main/resources/lua/remove_item_by_id.lua @@ -1,23 +1,25 @@ --- keys: queue_key, queue_metadata_key, queue_index --- argv: index_to_remove +local queueKey = KEYS[1] +local queueMetadataKey = KEYS[2] +local queueTotalIndexKey = KEYS[3] +local id = ARGV[1] -local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], ARGV[1], ARGV[1], "LIMIT", 0, 1) -local removedCount = redis.call("ZREMRANGEBYSCORE", KEYS[1], ARGV[1], ARGV[1]) -local senderIndex = redis.call("HGET", KEYS[2], ARGV[1]) -local guidIndex = redis.call("HGET", KEYS[2], ARGV[1] .. "guid") +local envelope = redis.call("ZRANGEBYSCORE", queueKey, id, id, "LIMIT", 0, 1) +local removedCount = redis.call("ZREMRANGEBYSCORE", queueKey, id, id) +local senderIndex = redis.call("HGET", queueMetadataKey, id) +local guidIndex = redis.call("HGET", queueMetadataKey, id .. "guid") if senderIndex then - redis.call("HDEL", KEYS[2], senderIndex) - redis.call("HDEL", KEYS[2], ARGV[1]) + redis.call("HDEL", queueMetadataKey, senderIndex) + redis.call("HDEL", queueMetadataKey, id) end if guidIndex then - redis.call("HDEL", KEYS[2], guidIndex) - redis.call("HDEL", KEYS[2], ARGV[1] .. "guid") + redis.call("HDEL", queueMetadataKey, guidIndex) + redis.call("HDEL", queueMetadataKey, id .. "guid") end -if (redis.call("ZCARD", KEYS[1]) == 0) then - redis.call("ZREM", KEYS[3], KEYS[1]) +if (redis.call("ZCARD", queueKey) == 0) then + redis.call("ZREM", queueTotalIndexKey, queueKey) end if envelope and next(envelope) then diff --git a/service/src/main/resources/lua/remove_item_by_sender.lua b/service/src/main/resources/lua/remove_item_by_sender.lua index 113a42ad7..ffd49ce02 100644 --- a/service/src/main/resources/lua/remove_item_by_sender.lua +++ b/service/src/main/resources/lua/remove_item_by_sender.lua @@ -1,23 +1,25 @@ --- keys: queue_key, queue_metadata_key, queue_index --- argv: sender_to_remove +local queueKey = KEYS[1] +local queueMetadataKey = KEYS[2] +local queueTotalIndexKey = KEYS[3] +local sender = ARGV[1] -local messageId = redis.call("HGET", KEYS[2], ARGV[1]) +local messageId = redis.call("HGET", queueMetadataKey, sender) if messageId then - local envelope = redis.call("ZRANGEBYSCORE", KEYS[1], messageId, messageId, "LIMIT", 0, 1) - local guid = redis.call("HGET", KEYS[2], messageId .. "guid") + local envelope = redis.call("ZRANGEBYSCORE", queueKey, messageId, messageId, "LIMIT", 0, 1) + local guid = redis.call("HGET", queueMetadataKey, messageId .. "guid") - redis.call("ZREMRANGEBYSCORE", KEYS[1], messageId, messageId) - redis.call("HDEL", KEYS[2], ARGV[1]) - redis.call("HDEL", KEYS[2], messageId) + redis.call("ZREMRANGEBYSCORE", queueKey, messageId, messageId) + redis.call("HDEL", queueMetadataKey, sender) + redis.call("HDEL", queueMetadataKey, messageId) if guid then - redis.call("HDEL", KEYS[2], guid) - redis.call("HDEL", KEYS[2], messageId .. "guid") + redis.call("HDEL", queueMetadataKey, guid) + redis.call("HDEL", queueMetadataKey, messageId .. "guid") end - if (redis.call("ZCARD", KEYS[1]) == 0) then - redis.call("ZREM", KEYS[3], KEYS[1]) + if (redis.call("ZCARD", queueKey) == 0) then + redis.call("ZREM", queueTotalIndexKey, queueKey) end if envelope and next(envelope) then diff --git a/service/src/main/resources/lua/remove_queue.lua b/service/src/main/resources/lua/remove_queue.lua index 315a0fa7e..ace767eb5 100644 --- a/service/src/main/resources/lua/remove_queue.lua +++ b/service/src/main/resources/lua/remove_queue.lua @@ -1,5 +1,7 @@ --- keys: queue_key, queue_metadata_key, queue_index +local queueKey = KEYS[1] +local queueMetadataKey = KEYS[2] +local queueTotalIndexKey = KEYS[3] -redis.call("DEL", KEYS[1]) -redis.call("DEL", KEYS[2]) -redis.call("ZREM", KEYS[3], KEYS[1]) +redis.call("DEL", queueKey) +redis.call("DEL", queueMetadataKey) +redis.call("ZREM", queueTotalIndexKey, queueKey)