Files
overleaf-cep/services/web/app/src/infrastructure/LockManager.js
Brian Gough bc12856112 Merge pull request #8401 from overleaf/bg-use-redis-locker-in-web
extract web LockManager implementation into redis-wrapper

GitOrigin-RevId: 60144d1b1136bab90475cb4b4a6597e1b3f6af22
2022-06-17 08:03:00 +00:00

29 lines
867 B
JavaScript

const settings = require('@overleaf/settings')
const RedisWrapper = require('./RedisWrapper')
const rclient = RedisWrapper.client('lock')
const { callbackify, promisify } = require('util')
const RedisWebLocker = require('@overleaf/redis-wrapper/RedisWebLocker')
const LockManager = new RedisWebLocker({
rclient,
getKey(namespace, id) {
return `lock:web:${namespace}:${id}`
},
options: settings.lockManager,
})
// need to bind the promisified function when it is part of a class
// see https://nodejs.org/dist/latest-v16.x/docs/api/util.html#utilpromisifyoriginal
const promisifiedRunWithLock = promisify(LockManager.runWithLock).bind(
LockManager
)
LockManager.promises = {
runWithLock(namespace, id, runner) {
const cbRunner = callbackify(runner)
return promisifiedRunWithLock(namespace, id, cbRunner)
},
}
module.exports = LockManager