lndhub/class/Lock.js
2019-04-13 18:56:12 +01:00

36 lines
771 B
JavaScript

export class Lock {
/**
*
* @param {Redis} redis
* @param {String} lock_key
*/
constructor(redis, lock_key) {
this._redis = redis;
this._lock_key = lock_key;
}
/**
* Tries to obtain lock in single-threaded Redis.
* Returns TRUE if success.
*
* @returns {Promise<boolean>}
*/
async obtainLock() {
const timestamp = +new Date();
let setResult = await this._redis.setnx(this._lock_key, timestamp);
if (!setResult) {
// it already held a value - failed locking
return false;
}
// success - got lock
await this._redis.expire(this._lock_key, 5 * 60);
// lock expires in 5 mins just for any case
return true;
}
async releaseLock() {
await this._redis.del(this._lock_key);
}
}