mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 20:48:06 +01:00
Repair queue metadata before persisting queues.
This commit is contained in:
committed by
Jon Chambers
parent
df7f209ebc
commit
952cfae4e6
@@ -16,7 +16,6 @@ if sender ~= "nil" then
|
||||
end
|
||||
|
||||
redis.call("HSET", queueMetadataKey, guid, messageId)
|
||||
|
||||
redis.call("HSET", queueMetadataKey, messageId .. "guid", guid)
|
||||
|
||||
redis.call("EXPIRE", queueKey, 7776000) -- 90 days
|
||||
|
||||
21
service/src/main/resources/lua/repair_queue_metadata.lua
Normal file
21
service/src/main/resources/lua/repair_queue_metadata.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
local queueKey = KEYS[1]
|
||||
local queueMetadataKey = KEYS[2]
|
||||
|
||||
local firstMessageWithScore = redis.call("ZRANGE", queueKey, 0, 0, "WITHSCORES")
|
||||
local lastMessageWithScore = redis.call("ZRANGE", queueKey, -1, -1, "WITHSCORES")
|
||||
|
||||
if firstMessageWithScore ~= nil and lastMessageWithScore ~= nil then
|
||||
local firstMessageId = tonumber(firstMessageWithScore[2])
|
||||
local lastMessageId = tonumber(lastMessageWithScore[2])
|
||||
|
||||
for messageId = firstMessageId,lastMessageId do
|
||||
if redis.call("ZRANGEBYSCORE", queueKey, messageId, messageId) then
|
||||
-- This message actually exists, and its GUID may be pointing to the wrong ID
|
||||
local guid = redis.call("HGET", queueMetadataKey, messageId .. "guid")
|
||||
redis.call("HSET", queueMetadataKey, guid, messageId)
|
||||
else
|
||||
-- No message actually exists with that ID; drop the metadata reference to that ID
|
||||
redis.call("HDEL", queueMetadataKey, messageId .. "guid")
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user