Commit 945145c0016e68ab95bf0003dc41a937777aaf36

Authored by Adhidarma Hadiwinoto
1 parent fe3033bbf9
Exists in master

mutex-common.js

Showing 1 changed file with 57 additions and 0 deletions Inline Diff

File was created 1 const DEBUGMODE = (process.env.NODE_ENV !== 'production') || process.env.DEBUG_MUTEX;
2
3 const locks = require('locks');
4 const logger = require('komodo-sdk/logger');
5
6 const locksList = {};
7 const lockBy = {};
8
9 exports.lock = function lock(lockName, label, cb) {
10 if (DEBUGMODE) logger.verbose('Locking MUTEX', { lockName, label });
11 return new Promise((resolve) => {
12 if (!locksList[lockName]) {
13 locksList[lockName] = locks.createMutex();
14 }
15
16 locksList[lockName].lock(() => {
17 lockBy[lockName] = label;
18 if (DEBUGMODE) logger.verbose('MUTEX locked', { lockName, label });
19 resolve(true);
20 if (typeof cb === 'function') cb();
21 });
22 });
23 };
24
25 exports.tryLock = function tryLock(lockName, label) {
26 if (DEBUGMODE) logger.verbose('Trying to enter MUTEX if not locked', { lockName, label });
27
28 if (!locksList[lockName]) {
29 locksList[lockName] = locks.createMutex();
30 }
31
32 const result = locksList[lockName].tryLock();
33 if (DEBUGMODE && result) logger.verbose('MUTEX entered', { lockName, label });
34 if (DEBUGMODE && !result) logger.verbose('MUTEX not entered', { lockName, label });
35 return result;
36 };
37
38
39 exports.unlock = function unlock(lockName, label) {
40 if (DEBUGMODE) logger.verbose('Unlocking MUTEX', { lockName, label });
41
42 if (!locksList[lockName]) {
43 logger.warn('Try to unlock undefined MUTEX', { lockName, label });
44 return;
45 }
46
47 try {
48 if (locksList[lockName]) locksList[lockName].unlock();
49 if (DEBUGMODE) logger.verbose('MUTEX unlocked', { lockName, label });
50 } catch (e) {
51 logger.warn('Exception on unlocking MUTEX', { lockName, label, e });
52 }
53 };
54
55 exports.getLockBy = function getLockBy(lockName) {
56 return lockBy[lockName];
57 };
58