budibase/packages/backend-core/src/redis/authRedis.js

62 lines
1.5 KiB
JavaScript
Raw Normal View History

const Client = require("./index")
const utils = require("./utils")
const { getRedlock } = require("./redlock")
2021-07-06 19:10:04 +02:00
let userClient, sessionClient, appClient, cacheClient
let migrationsRedlock
// turn retry off so that only one instance can ever hold the lock
const migrationsRedlockConfig = { retryCount: 0 }
2021-07-06 19:10:04 +02:00
async function init() {
userClient = await new Client(utils.Databases.USER_CACHE).init()
sessionClient = await new Client(utils.Databases.SESSIONS).init()
appClient = await new Client(utils.Databases.APP_METADATA).init()
cacheClient = await new Client(utils.Databases.GENERIC_CACHE).init()
// pass the underlying ioredis client to redlock
migrationsRedlock = getRedlock(
cacheClient.getClient(),
migrationsRedlockConfig
)
2021-07-06 19:10:04 +02:00
}
process.on("exit", async () => {
if (userClient) await userClient.finish()
if (sessionClient) await sessionClient.finish()
if (appClient) await appClient.finish()
if (cacheClient) await cacheClient.finish()
2021-07-06 19:10:04 +02:00
})
module.exports = {
getUserClient: async () => {
if (!userClient) {
await init()
}
return userClient
},
getSessionClient: async () => {
if (!sessionClient) {
await init()
}
return sessionClient
},
getAppClient: async () => {
if (!appClient) {
await init()
}
return appClient
},
getCacheClient: async () => {
if (!cacheClient) {
await init()
}
return cacheClient
},
getMigrationsRedlock: async () => {
if (!migrationsRedlock) {
await init()
}
return migrationsRedlock
},
2021-07-06 19:10:04 +02:00
}