--[[******************************************************************************]] --[[* Project ib_win_core *]] --[[* Copyright 2023 Incredibuild Software Ltd. *]] --[[* All rights reserved *]] --[[******************************************************************************]] local function remove_invalid_info(infoDB, usageDB, initDB, keycursor) local keys keycursor, keys = unpack(redis.call('SCAN', keycursor)) for _, key in ipairs(keys) do local valcursor = '0' repeat local vals valcursor, vals = unpack(redis.call('HSCAN', key, valcursor)) for i = 1, #vals, 2 do if vals[i + 1] ~= '1' then redis.call('SELECT', infoDB) redis.call('HDEL', key, vals[i]) if vals[i + 1] ~= '0' then redis.call('SELECT', usageDB) redis.call('HDEL', vals[i + 1], key..vals[i]) end redis.call('SELECT', initDB) end end until valcursor == '0' end return keycursor end local function main(infoDB, usageDB, initDB, keycursor) redis.call('SELECT', initDB) keycursor = remove_invalid_info(infoDB, usageDB, initDB, keycursor) if keycursor == '0' then redis.call('FLUSHDB') end return 'OK' .. "\n" .. keycursor end local ok, result = pcall(main, unpack(ARGV)) return result