mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-01 05:11:34 +02:00
extract web LockManager implementation into redis-wrapper GitOrigin-RevId: 60144d1b1136bab90475cb4b4a6597e1b3f6af22
29 lines
867 B
JavaScript
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
|