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