redis-smq-common 8.0.3 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/cjs/src/logger/console-logger/console-logger.d.ts +14 -0
- package/dist/cjs/src/logger/console-logger/console-logger.d.ts.map +1 -0
- package/dist/cjs/src/logger/console-logger/console-logger.js +61 -0
- package/dist/cjs/src/logger/console-logger/console-logger.js.map +1 -0
- package/dist/cjs/src/logger/console-logger/console-message-formatter.d.ts +17 -0
- package/dist/cjs/src/logger/console-logger/console-message-formatter.d.ts.map +1 -0
- package/dist/cjs/src/logger/console-logger/console-message-formatter.js +48 -0
- package/dist/cjs/src/logger/console-logger/console-message-formatter.js.map +1 -0
- package/dist/cjs/src/logger/console-logger/index.d.ts +3 -0
- package/dist/cjs/src/logger/console-logger/index.d.ts.map +1 -0
- package/dist/cjs/src/logger/console-logger/index.js +19 -0
- package/dist/cjs/src/logger/console-logger/index.js.map +1 -0
- package/dist/cjs/src/logger/console-logger/types/console-logger.d.ts +15 -0
- package/dist/cjs/src/logger/console-logger/types/console-logger.d.ts.map +1 -0
- package/dist/cjs/src/logger/console-logger/types/console-logger.js +11 -0
- package/dist/cjs/src/logger/console-logger/types/console-logger.js.map +1 -0
- package/dist/cjs/src/logger/console-logger/types/index.d.ts +2 -0
- package/dist/cjs/src/logger/console-logger/types/index.d.ts.map +1 -0
- package/dist/cjs/src/logger/console-logger/types/index.js +18 -0
- package/dist/cjs/src/logger/console-logger/types/index.js.map +1 -0
- package/dist/cjs/src/logger/index.d.ts +1 -0
- package/dist/cjs/src/logger/index.d.ts.map +1 -1
- package/dist/cjs/src/logger/index.js +1 -0
- package/dist/cjs/src/logger/index.js.map +1 -1
- package/dist/cjs/src/logger/logger.d.ts +1 -1
- package/dist/cjs/src/logger/logger.d.ts.map +1 -1
- package/dist/cjs/src/logger/logger.js +27 -5
- package/dist/cjs/src/logger/logger.js.map +1 -1
- package/dist/cjs/src/logger/types/index.d.ts +1 -7
- package/dist/cjs/src/logger/types/index.d.ts.map +1 -1
- package/dist/cjs/src/logger/types/index.js +1 -1
- package/dist/cjs/src/logger/types/logger.d.ts +12 -0
- package/dist/cjs/src/logger/types/logger.d.ts.map +1 -0
- package/dist/cjs/src/logger/types/{config.js → logger.js} +1 -1
- package/dist/cjs/src/logger/types/logger.js.map +1 -0
- package/dist/cjs/src/redis-client/clients/ioredis/ioredis-client.d.ts +1 -0
- package/dist/cjs/src/redis-client/clients/ioredis/ioredis-client.d.ts.map +1 -1
- package/dist/cjs/src/redis-client/clients/ioredis/ioredis-client.js +3 -0
- package/dist/cjs/src/redis-client/clients/ioredis/ioredis-client.js.map +1 -1
- package/dist/cjs/src/redis-client/clients/node-redis/node-redis-client.d.ts +1 -0
- package/dist/cjs/src/redis-client/clients/node-redis/node-redis-client.d.ts.map +1 -1
- package/dist/cjs/src/redis-client/clients/node-redis/node-redis-client.js +6 -0
- package/dist/cjs/src/redis-client/clients/node-redis/node-redis-client.js.map +1 -1
- package/dist/cjs/src/redis-client/clients/redis-client-abstract.d.ts +1 -0
- package/dist/cjs/src/redis-client/clients/redis-client-abstract.d.ts.map +1 -1
- package/dist/cjs/src/redis-client/clients/redis-client-abstract.js.map +1 -1
- package/dist/cjs/src/redis-client/types/redis-client.d.ts +1 -0
- package/dist/cjs/src/redis-client/types/redis-client.d.ts.map +1 -1
- package/dist/cjs/src/redis-lock/redis-lock.d.ts +2 -0
- package/dist/cjs/src/redis-lock/redis-lock.d.ts.map +1 -1
- package/dist/cjs/src/redis-lock/redis-lock.js +114 -19
- package/dist/cjs/src/redis-lock/redis-lock.js.map +1 -1
- package/dist/cjs/src/worker/worker-callable.d.ts +2 -1
- package/dist/cjs/src/worker/worker-callable.d.ts.map +1 -1
- package/dist/cjs/src/worker/worker-callable.js +31 -3
- package/dist/cjs/src/worker/worker-callable.js.map +1 -1
- package/dist/cjs/src/worker/worker-resource-group.d.ts.map +1 -1
- package/dist/cjs/src/worker/worker-resource-group.js +100 -17
- package/dist/cjs/src/worker/worker-resource-group.js.map +1 -1
- package/dist/cjs/src/worker/worker-runnable.d.ts +2 -1
- package/dist/cjs/src/worker/worker-runnable.d.ts.map +1 -1
- package/dist/cjs/src/worker/worker-runnable.js +33 -4
- package/dist/cjs/src/worker/worker-runnable.js.map +1 -1
- package/dist/cjs/src/worker/worker.d.ts +4 -1
- package/dist/cjs/src/worker/worker.d.ts.map +1 -1
- package/dist/cjs/src/worker/worker.js +206 -57
- package/dist/cjs/src/worker/worker.js.map +1 -1
- package/dist/esm/src/logger/console-logger/console-logger.d.ts +14 -0
- package/dist/esm/src/logger/console-logger/console-logger.d.ts.map +1 -0
- package/dist/esm/src/logger/console-logger/console-logger.js +59 -0
- package/dist/esm/src/logger/console-logger/console-logger.js.map +1 -0
- package/dist/esm/src/logger/console-logger/console-message-formatter.d.ts +17 -0
- package/dist/esm/src/logger/console-logger/console-message-formatter.d.ts.map +1 -0
- package/dist/esm/src/logger/console-logger/console-message-formatter.js +47 -0
- package/dist/esm/src/logger/console-logger/console-message-formatter.js.map +1 -0
- package/dist/esm/src/logger/console-logger/index.d.ts +3 -0
- package/dist/esm/src/logger/console-logger/index.d.ts.map +1 -0
- package/dist/esm/src/logger/console-logger/index.js +3 -0
- package/dist/esm/src/logger/console-logger/index.js.map +1 -0
- package/dist/esm/src/logger/console-logger/types/console-logger.d.ts +15 -0
- package/dist/esm/src/logger/console-logger/types/console-logger.d.ts.map +1 -0
- package/dist/esm/src/logger/console-logger/types/console-logger.js +8 -0
- package/dist/esm/src/logger/console-logger/types/console-logger.js.map +1 -0
- package/dist/esm/src/logger/console-logger/types/index.d.ts +2 -0
- package/dist/esm/src/logger/console-logger/types/index.d.ts.map +1 -0
- package/dist/esm/src/logger/console-logger/types/index.js +2 -0
- package/dist/esm/src/logger/console-logger/types/index.js.map +1 -0
- package/dist/esm/src/logger/index.d.ts +1 -0
- package/dist/esm/src/logger/index.d.ts.map +1 -1
- package/dist/esm/src/logger/index.js +1 -0
- package/dist/esm/src/logger/index.js.map +1 -1
- package/dist/esm/src/logger/logger.d.ts +1 -1
- package/dist/esm/src/logger/logger.d.ts.map +1 -1
- package/dist/esm/src/logger/logger.js +25 -3
- package/dist/esm/src/logger/logger.js.map +1 -1
- package/dist/esm/src/logger/types/index.d.ts +1 -7
- package/dist/esm/src/logger/types/index.d.ts.map +1 -1
- package/dist/esm/src/logger/types/index.js +1 -1
- package/dist/esm/src/logger/types/logger.d.ts +12 -0
- package/dist/esm/src/logger/types/logger.d.ts.map +1 -0
- package/dist/esm/src/logger/types/logger.js +2 -0
- package/dist/esm/src/logger/types/logger.js.map +1 -0
- package/dist/esm/src/redis-client/clients/ioredis/ioredis-client.d.ts +1 -0
- package/dist/esm/src/redis-client/clients/ioredis/ioredis-client.d.ts.map +1 -1
- package/dist/esm/src/redis-client/clients/ioredis/ioredis-client.js +3 -0
- package/dist/esm/src/redis-client/clients/ioredis/ioredis-client.js.map +1 -1
- package/dist/esm/src/redis-client/clients/node-redis/node-redis-client.d.ts +1 -0
- package/dist/esm/src/redis-client/clients/node-redis/node-redis-client.d.ts.map +1 -1
- package/dist/esm/src/redis-client/clients/node-redis/node-redis-client.js +6 -0
- package/dist/esm/src/redis-client/clients/node-redis/node-redis-client.js.map +1 -1
- package/dist/esm/src/redis-client/clients/redis-client-abstract.d.ts +1 -0
- package/dist/esm/src/redis-client/clients/redis-client-abstract.d.ts.map +1 -1
- package/dist/esm/src/redis-client/clients/redis-client-abstract.js.map +1 -1
- package/dist/esm/src/redis-client/types/redis-client.d.ts +1 -0
- package/dist/esm/src/redis-client/types/redis-client.d.ts.map +1 -1
- package/dist/esm/src/redis-lock/redis-lock.d.ts +2 -0
- package/dist/esm/src/redis-lock/redis-lock.d.ts.map +1 -1
- package/dist/esm/src/redis-lock/redis-lock.js +114 -19
- package/dist/esm/src/redis-lock/redis-lock.js.map +1 -1
- package/dist/esm/src/worker/worker-callable.d.ts +2 -1
- package/dist/esm/src/worker/worker-callable.d.ts.map +1 -1
- package/dist/esm/src/worker/worker-callable.js +31 -3
- package/dist/esm/src/worker/worker-callable.js.map +1 -1
- package/dist/esm/src/worker/worker-resource-group.d.ts.map +1 -1
- package/dist/esm/src/worker/worker-resource-group.js +100 -17
- package/dist/esm/src/worker/worker-resource-group.js.map +1 -1
- package/dist/esm/src/worker/worker-runnable.d.ts +2 -1
- package/dist/esm/src/worker/worker-runnable.d.ts.map +1 -1
- package/dist/esm/src/worker/worker-runnable.js +33 -4
- package/dist/esm/src/worker/worker-runnable.js.map +1 -1
- package/dist/esm/src/worker/worker.d.ts +4 -1
- package/dist/esm/src/worker/worker.d.ts.map +1 -1
- package/dist/esm/src/worker/worker.js +206 -55
- package/dist/esm/src/worker/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/cjs/src/logger/types/config.d.ts +0 -4
- package/dist/cjs/src/logger/types/config.d.ts.map +0 -1
- package/dist/cjs/src/logger/types/config.js.map +0 -1
- package/dist/esm/src/logger/types/config.d.ts +0 -4
- package/dist/esm/src/logger/types/config.d.ts.map +0 -1
- package/dist/esm/src/logger/types/config.js +0 -2
- package/dist/esm/src/logger/types/config.js.map +0 -1
|
@@ -17,91 +17,174 @@ export class WorkerResourceGroup extends Runnable {
|
|
|
17
17
|
super();
|
|
18
18
|
this.powerManager = new PowerSwitch();
|
|
19
19
|
this.logger = logger;
|
|
20
|
+
this.logger.info(`Initializing WorkerResourceGroup with ID: ${resourceGroupId}`);
|
|
20
21
|
this.redisClient = redisClient;
|
|
21
|
-
this.redisClient.once('error', (err) =>
|
|
22
|
+
this.redisClient.once('error', (err) => {
|
|
23
|
+
this.logger.error(`Redis client error: ${err.message}`, err);
|
|
24
|
+
this.handleError(err);
|
|
25
|
+
});
|
|
26
|
+
this.logger.debug(`Creating RedisLock for resource group: ${resourceGroupId}`);
|
|
22
27
|
this.locker = new RedisLock(redisClient, logger, resourceGroupId, 60000, true, 15000);
|
|
23
28
|
this.locker.on('locker.error', (err) => {
|
|
29
|
+
this.logger.error(`Locker error: ${err.message}`, err);
|
|
24
30
|
this.handleError(err);
|
|
25
31
|
});
|
|
32
|
+
this.logger.info(`WorkerResourceGroup initialized with ID: ${resourceGroupId}`);
|
|
26
33
|
}
|
|
27
34
|
lock = (cb) => {
|
|
28
|
-
this.
|
|
29
|
-
|
|
35
|
+
this.logger.debug('Attempting to acquire lock...');
|
|
36
|
+
this.locker.acquireLock((err, acquired) => {
|
|
37
|
+
if (err) {
|
|
38
|
+
this.logger.error(`Failed to acquire lock: ${err.message}`, err);
|
|
30
39
|
cb(err);
|
|
31
|
-
|
|
40
|
+
}
|
|
41
|
+
else if (acquired) {
|
|
32
42
|
this.logger.info(`Workers are exclusively running from this instance (Lock ID ${this.locker.getId()}).`);
|
|
33
43
|
cb();
|
|
34
44
|
}
|
|
45
|
+
else {
|
|
46
|
+
this.logger.warn('Lock was not acquired, but no error was returned');
|
|
47
|
+
cb();
|
|
48
|
+
}
|
|
35
49
|
});
|
|
36
50
|
};
|
|
37
51
|
runWorkers = (cb) => {
|
|
38
52
|
if (!this.runWorkersLocked) {
|
|
53
|
+
this.logger.info(`Starting ${this.workers.length} workers...`);
|
|
39
54
|
this.runWorkersLocked = true;
|
|
40
|
-
async.
|
|
41
|
-
worker.
|
|
55
|
+
async.eachOf(this.workers, (worker, index, done) => {
|
|
56
|
+
this.logger.debug(`Starting worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()})`);
|
|
57
|
+
worker.run((err) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
this.logger.error(`Failed to start worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()}): ${err.message}`, err);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.logger.debug(`Worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()}) started successfully`);
|
|
63
|
+
}
|
|
64
|
+
done(err);
|
|
65
|
+
});
|
|
42
66
|
}, (err) => {
|
|
43
67
|
this.runWorkersLocked = false;
|
|
68
|
+
if (err) {
|
|
69
|
+
this.logger.error(`Error starting workers: ${err.message}`, err);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.logger.info(`All ${this.workers.length} workers started successfully`);
|
|
73
|
+
}
|
|
44
74
|
cb(err);
|
|
45
75
|
});
|
|
46
76
|
}
|
|
47
|
-
else
|
|
77
|
+
else {
|
|
78
|
+
this.logger.warn('Attempted to run workers while already locked');
|
|
48
79
|
cb(new AbortError());
|
|
80
|
+
}
|
|
49
81
|
};
|
|
50
82
|
shutDownWorkers = (cb) => {
|
|
51
83
|
if (!this.runWorkersLocked) {
|
|
84
|
+
this.logger.info(`Shutting down ${this.workers.length} workers...`);
|
|
52
85
|
this.runWorkersLocked = true;
|
|
53
|
-
async.
|
|
54
|
-
|
|
86
|
+
async.eachOf(this.workers, (worker, index, done) => {
|
|
87
|
+
this.logger.debug(`Shutting down worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()})`);
|
|
88
|
+
worker.shutdown((err) => {
|
|
89
|
+
if (err) {
|
|
90
|
+
this.logger.warn(`Error shutting down worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()}): ${err.message}`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.logger.debug(`Worker ${index + 1}/${this.workers.length} (ID: ${worker.getId()}) shut down successfully`);
|
|
94
|
+
}
|
|
95
|
+
done();
|
|
96
|
+
});
|
|
55
97
|
}, () => {
|
|
56
98
|
this.workers = [];
|
|
57
99
|
this.runWorkersLocked = false;
|
|
100
|
+
this.logger.info('All workers have been shut down');
|
|
58
101
|
cb();
|
|
59
102
|
});
|
|
60
103
|
}
|
|
61
|
-
else
|
|
104
|
+
else {
|
|
105
|
+
this.logger.debug('Workers shutdown requested but workers are locked, retrying in 1 second...');
|
|
62
106
|
setTimeout(() => this.shutDownWorkers(cb), 1000);
|
|
107
|
+
}
|
|
63
108
|
};
|
|
64
109
|
releaseLock = (cb) => {
|
|
65
|
-
this.
|
|
110
|
+
this.logger.debug('Releasing lock...');
|
|
111
|
+
this.locker.releaseLock((err) => {
|
|
112
|
+
if (err) {
|
|
113
|
+
this.logger.error(`Failed to release lock: ${err.message}`, err);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.logger.info('Lock released successfully');
|
|
117
|
+
}
|
|
118
|
+
cb(err);
|
|
119
|
+
});
|
|
66
120
|
};
|
|
67
121
|
getLogger() {
|
|
68
122
|
return this.logger;
|
|
69
123
|
}
|
|
70
124
|
goingUp() {
|
|
125
|
+
this.logger.debug('WorkerResourceGroup going up...');
|
|
71
126
|
return super.goingUp().concat([this.lock, this.runWorkers]);
|
|
72
127
|
}
|
|
73
128
|
goingDown() {
|
|
129
|
+
this.logger.debug('WorkerResourceGroup going down...');
|
|
74
130
|
return [this.shutDownWorkers, this.releaseLock].concat(super.goingDown());
|
|
75
131
|
}
|
|
76
132
|
handleError(err) {
|
|
77
133
|
if (this.isRunning()) {
|
|
134
|
+
this.logger.error(`WorkerResourceGroup error: ${err.message}`, err);
|
|
78
135
|
this.emit('workerResourceGroup.error', err);
|
|
79
136
|
super.handleError(err);
|
|
80
137
|
}
|
|
81
138
|
}
|
|
82
139
|
addWorker = (filename, payload) => {
|
|
83
|
-
|
|
84
|
-
worker
|
|
140
|
+
this.logger.debug(`Adding worker from file: ${filename}`);
|
|
141
|
+
const worker = new WorkerRunnable(filename, payload, this.logger);
|
|
142
|
+
worker.on('worker.error', (err) => {
|
|
143
|
+
this.logger.error(`Worker error from ${filename}: ${err.message}`, err);
|
|
144
|
+
this.handleError(err);
|
|
145
|
+
});
|
|
85
146
|
this.workers.push(worker);
|
|
147
|
+
this.logger.info(`Worker added from file: ${filename}, total workers: ${this.workers.length}`);
|
|
86
148
|
};
|
|
87
149
|
loadFromDir = (workersDir, payload, cb) => {
|
|
88
150
|
if (this.isDown() && !this.isGoingUp()) {
|
|
151
|
+
this.logger.info(`Loading workers from directory: ${workersDir}`);
|
|
89
152
|
readdir(workersDir, (err, files) => {
|
|
90
|
-
if (err)
|
|
153
|
+
if (err) {
|
|
154
|
+
this.logger.error(`Failed to read workers directory ${workersDir}: ${err.message}`, err);
|
|
91
155
|
cb(err);
|
|
156
|
+
}
|
|
92
157
|
else {
|
|
93
|
-
|
|
158
|
+
this.logger.debug(`Found ${files.length} files in workers directory`);
|
|
159
|
+
let workerCount = 0;
|
|
160
|
+
async.eachOf(files ?? [], (file, index, done) => {
|
|
94
161
|
if (file.endsWith('.worker.js')) {
|
|
95
162
|
const filepath = path.resolve(workersDir, file);
|
|
163
|
+
this.logger.debug(`Loading worker file ${index + 1}/${files.length}: ${file}`);
|
|
96
164
|
this.addWorker(filepath, payload);
|
|
165
|
+
workerCount++;
|
|
97
166
|
done();
|
|
98
167
|
}
|
|
99
|
-
else
|
|
168
|
+
else {
|
|
169
|
+
this.logger.debug(`Skipping non-worker file: ${file}`);
|
|
100
170
|
done();
|
|
101
|
-
|
|
171
|
+
}
|
|
172
|
+
}, (err) => {
|
|
173
|
+
if (err) {
|
|
174
|
+
this.logger.error(`Error loading workers: ${err.message}`, err);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.logger.info(`Successfully loaded ${workerCount} workers from ${files.length} files`);
|
|
178
|
+
}
|
|
179
|
+
cb(err);
|
|
180
|
+
});
|
|
102
181
|
}
|
|
103
182
|
});
|
|
104
183
|
}
|
|
184
|
+
else {
|
|
185
|
+
this.logger.warn('Cannot load workers: WorkerResourceGroup is not in DOWN state');
|
|
186
|
+
cb(new Error('Cannot load workers: WorkerResourceGroup is not in DOWN state'));
|
|
187
|
+
}
|
|
105
188
|
};
|
|
106
189
|
}
|
|
107
190
|
//# sourceMappingURL=worker-resource-group.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-resource-group.js","sourceRoot":"","sources":["../../../../src/worker/worker-resource-group.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD,MAAM,OAAO,mBAAoB,SAAQ,QAAmC;IACvD,YAAY,CAAC;IACb,MAAM,CAAC;IACP,WAAW,CAAC;IACZ,MAAM,CAAC;IAChB,OAAO,GAA8B,EAAE,CAAC;IACxC,gBAAgB,GAAG,KAAK,CAAC;IAEnC,YACE,WAAyB,EACzB,MAAe,EACf,eAAuB;QAEvB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-resource-group.js","sourceRoot":"","sources":["../../../../src/worker/worker-resource-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ICallback } from '../common/index.js';
|
|
2
|
+
import { ILogger } from '../logger/index.js';
|
|
2
3
|
import { PowerSwitch } from '../power-switch/index.js';
|
|
3
4
|
import { EWorkerType, IWorkerRunnable } from './types/index.js';
|
|
4
5
|
import { Worker } from './worker.js';
|
|
5
6
|
export declare class WorkerRunnable<InitialPayload> extends Worker<void, void> implements IWorkerRunnable {
|
|
6
7
|
protected readonly type: EWorkerType;
|
|
7
8
|
protected readonly powerSwitch: PowerSwitch;
|
|
8
|
-
constructor(workerFilename: string, initialPayload?: InitialPayload);
|
|
9
|
+
constructor(workerFilename: string, initialPayload?: InitialPayload, logger?: ILogger);
|
|
9
10
|
run(cb: ICallback<void>): void;
|
|
10
11
|
shutdown(cb: ICallback<void>): void;
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-runnable.d.ts","sourceRoot":"","sources":["../../../../src/worker/worker-runnable.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,OAAO,EAEL,WAAW,EACX,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,cAAc,CAAC,cAAc,CACxC,SAAQ,MAAM,CAAC,IAAI,EAAE,IAAI,CACzB,YAAW,eAAe;IAE1B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAwB;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,cAAC;
|
|
1
|
+
{"version":3,"file":"worker-runnable.d.ts","sourceRoot":"","sources":["../../../../src/worker/worker-runnable.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,OAAO,EAEL,WAAW,EACX,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,cAAc,CAAC,cAAc,CACxC,SAAQ,MAAM,CAAC,IAAI,EAAE,IAAI,CACzB,YAAW,eAAe;IAE1B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAwB;IAC5D,SAAS,CAAC,QAAQ,CAAC,WAAW,cAAC;gBAG7B,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,cAAc,EAC/B,MAAM,CAAC,EAAE,OAAO;IAclB,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;IAwBd,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;CA4BtC"}
|
|
@@ -5,31 +5,60 @@ import { Worker } from './worker.js';
|
|
|
5
5
|
export class WorkerRunnable extends Worker {
|
|
6
6
|
type = EWorkerType.RUNNABLE;
|
|
7
7
|
powerSwitch;
|
|
8
|
-
constructor(workerFilename, initialPayload) {
|
|
8
|
+
constructor(workerFilename, initialPayload, logger) {
|
|
9
9
|
super(workerFilename, initialPayload);
|
|
10
|
+
this.logger = logger ?? this.logger;
|
|
10
11
|
this.powerSwitch = new PowerSwitch();
|
|
12
|
+
this.logger.info(`WorkerRunnable instance created for ${workerFilename}`);
|
|
13
|
+
this.logger.debug('WorkerRunnable initialization details', {
|
|
14
|
+
id: this.id,
|
|
15
|
+
type: EWorkerType[this.type],
|
|
16
|
+
hasCustomLogger: !!logger,
|
|
17
|
+
initialPayload: this.initialPayload ? 'provided' : 'none',
|
|
18
|
+
});
|
|
11
19
|
}
|
|
12
20
|
run(cb) {
|
|
21
|
+
this.logger.info(`Attempting to run worker ${this.id}`);
|
|
13
22
|
const r = this.powerSwitch.goingUp();
|
|
14
23
|
if (r) {
|
|
24
|
+
this.logger.debug('Power switch state changed to going up');
|
|
25
|
+
this.logger.debug('Registering worker thread event handlers');
|
|
15
26
|
this.registerEvents(this);
|
|
27
|
+
this.logger.debug(`Posting RUN message to worker thread`);
|
|
16
28
|
this.postMessage({ type: EWorkerThreadParentMessage.RUN });
|
|
29
|
+
this.logger.debug('Committing power switch state change');
|
|
17
30
|
this.powerSwitch.commit();
|
|
31
|
+
this.logger.info(`Worker ${this.id} started successfully`);
|
|
18
32
|
cb();
|
|
19
33
|
}
|
|
20
|
-
else
|
|
34
|
+
else {
|
|
35
|
+
this.logger.warn(`Cannot start worker ${this.id}: already running`);
|
|
21
36
|
cb(new WorkerAlreadyRunningError());
|
|
37
|
+
}
|
|
22
38
|
}
|
|
23
39
|
shutdown(cb) {
|
|
40
|
+
this.logger.info(`Attempting to shut down worker ${this.id}`);
|
|
24
41
|
const r = this.powerSwitch.goingDown();
|
|
25
42
|
if (r) {
|
|
26
|
-
|
|
43
|
+
this.logger.debug('Power switch state changed to going down');
|
|
44
|
+
this.logger.debug('Calling parent shutdown method');
|
|
45
|
+
super.shutdown((err) => {
|
|
46
|
+
if (err) {
|
|
47
|
+
this.logger.warn(`Error during worker ${this.id} shutdown: ${err.message}`, {
|
|
48
|
+
error: err.message,
|
|
49
|
+
stack: err.stack,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
this.logger.debug('Committing power switch state change');
|
|
27
53
|
this.powerSwitch.commit();
|
|
54
|
+
this.logger.info(`Worker ${this.id} shut down successfully`);
|
|
28
55
|
cb();
|
|
29
56
|
});
|
|
30
57
|
}
|
|
31
|
-
else
|
|
58
|
+
else {
|
|
59
|
+
this.logger.warn(`Cannot shut down worker ${this.id}: already down`);
|
|
32
60
|
cb(new WorkerAlreadyDownError());
|
|
61
|
+
}
|
|
33
62
|
}
|
|
34
63
|
}
|
|
35
64
|
//# sourceMappingURL=worker-runnable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-runnable.js","sourceRoot":"","sources":["../../../../src/worker/worker-runnable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker-runnable.js","sourceRoot":"","sources":["../../../../src/worker/worker-runnable.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,13 @@ export type TWorkerEvent = {
|
|
|
8
8
|
};
|
|
9
9
|
export declare abstract class Worker<Payload, Reply> extends EventEmitter<TWorkerEvent> {
|
|
10
10
|
protected abstract readonly type: EWorkerType;
|
|
11
|
+
protected readonly id: `${string}-${string}-${string}-${string}-${string}`;
|
|
11
12
|
protected readonly workerFilename: string;
|
|
12
13
|
protected readonly initialPayload: unknown;
|
|
13
14
|
protected workerThread: WorkerThread | null;
|
|
14
|
-
|
|
15
|
+
protected logger: import("../logger/index.js").ILogger;
|
|
16
|
+
protected constructor(workerFilename: string, initialPayload?: unknown);
|
|
17
|
+
getId(): string;
|
|
15
18
|
protected getWorkerThread(): WorkerThread;
|
|
16
19
|
protected registerEvents(cb: ICallback<Reply> | Worker<Payload, Reply>): void;
|
|
17
20
|
postMessage(message: TWorkerThreadParentMessage): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../../src/worker/worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../../src/worker/worker.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,EAIL,WAAW,EAEX,0BAA0B,EAC3B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3C,CAAC;AAYF,8BAAsB,MAAM,CAC1B,OAAO,EACP,KAAK,CACL,SAAQ,YAAY,CAAC,YAAY,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,EAAE,sDAAC;IACtB,SAAS,CAAC,QAAQ,CAAC,cAAc,SAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,cAAc,UAAC;IAClC,SAAS,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAQ;IACnD,SAAS,CAAC,MAAM,uCAAC;IAEjB,SAAS,aAAa,cAAc,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO;IAmBtE,KAAK,IAAI,MAAM;IAkBf,SAAS,CAAC,eAAe,IAAI,YAAY;IAsGzC,SAAS,CAAC,cAAc,CACtB,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAC5C,IAAI;IAoGP,WAAW,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAiCtD,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC;CA8B7B"}
|
|
@@ -1,94 +1,245 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { resolve } from 'path';
|
|
2
3
|
import { Worker as WorkerThread } from 'worker_threads';
|
|
3
4
|
import { env } from '../env/index.js';
|
|
4
5
|
import { EventEmitter } from '../event/index.js';
|
|
6
|
+
import { logger } from '../logger/index.js';
|
|
5
7
|
import { WorkerThreadError } from './errors/index.js';
|
|
6
|
-
import { EWorkerThreadChildExecutionCode, EWorkerThreadChildExitCode, } from './types/index.js';
|
|
8
|
+
import { EWorkerThreadChildExecutionCode, EWorkerThreadChildExitCode, EWorkerThreadParentMessage, EWorkerType, } from './types/index.js';
|
|
7
9
|
const dir = env.getCurrentDir();
|
|
8
10
|
export class Worker extends EventEmitter {
|
|
11
|
+
id;
|
|
9
12
|
workerFilename;
|
|
10
13
|
initialPayload;
|
|
11
14
|
workerThread = null;
|
|
15
|
+
logger;
|
|
12
16
|
constructor(workerFilename, initialPayload) {
|
|
13
17
|
super();
|
|
18
|
+
this.id = randomUUID();
|
|
14
19
|
this.workerFilename = workerFilename;
|
|
15
20
|
this.initialPayload = initialPayload;
|
|
21
|
+
this.logger = logger.getLogger({ enabled: false });
|
|
22
|
+
this.logger.info(`Worker instance created for ${workerFilename}`);
|
|
23
|
+
this.logger.debug('Worker initialization details', {
|
|
24
|
+
id: this.id,
|
|
25
|
+
filename: workerFilename,
|
|
26
|
+
initialPayload: this.initialPayload ? 'provided' : 'none',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
getId() {
|
|
30
|
+
return this.id;
|
|
16
31
|
}
|
|
17
32
|
getWorkerThread() {
|
|
18
33
|
if (!this.workerThread) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
});
|
|
26
|
-
this.workerThread.on('messageerror', (err) => {
|
|
27
|
-
console.error(err);
|
|
28
|
-
});
|
|
29
|
-
this.workerThread.on('error', (err) => {
|
|
30
|
-
console.error(err);
|
|
31
|
-
});
|
|
32
|
-
this.workerThread.on('exit', () => {
|
|
33
|
-
this.workerThread = null;
|
|
34
|
+
const workerThreadPath = resolve(dir, './worker-thread/worker-thread.js');
|
|
35
|
+
this.logger.info(`Creating new worker thread from ${workerThreadPath}`);
|
|
36
|
+
this.logger.debug('Worker thread configuration', {
|
|
37
|
+
filename: this.workerFilename,
|
|
38
|
+
type: EWorkerType[this.type],
|
|
39
|
+
workerThreadPath,
|
|
34
40
|
});
|
|
41
|
+
try {
|
|
42
|
+
this.workerThread = new WorkerThread(workerThreadPath, {
|
|
43
|
+
workerData: {
|
|
44
|
+
filename: this.workerFilename,
|
|
45
|
+
initialPayload: this.initialPayload,
|
|
46
|
+
type: this.type,
|
|
47
|
+
},
|
|
48
|
+
stdout: true,
|
|
49
|
+
});
|
|
50
|
+
this.logger.debug('Worker thread created successfully');
|
|
51
|
+
if (this.workerThread.stdout) {
|
|
52
|
+
this.logger.debug('Setting up stdout capture for worker thread');
|
|
53
|
+
this.workerThread.stdout.on('data', (data) => {
|
|
54
|
+
const output = data.toString().trim();
|
|
55
|
+
if (output) {
|
|
56
|
+
this.logger.debug(output);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.logger.warn('Worker thread stdout is not available');
|
|
62
|
+
}
|
|
63
|
+
if (this.workerThread.stderr) {
|
|
64
|
+
this.logger.debug('Setting up stderr capture for worker thread');
|
|
65
|
+
this.workerThread.stderr.on('data', (data) => {
|
|
66
|
+
const output = data.toString().trim();
|
|
67
|
+
if (output) {
|
|
68
|
+
this.logger.error(output);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.logger.warn('Worker thread stderr is not available');
|
|
74
|
+
}
|
|
75
|
+
this.workerThread.on('messageerror', (err) => {
|
|
76
|
+
this.logger.error(`Worker message deserialization error: ${err.message}`, {
|
|
77
|
+
error: err.message,
|
|
78
|
+
stack: err.stack,
|
|
79
|
+
name: err.name,
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
this.workerThread.on('error', (err) => {
|
|
83
|
+
this.logger.error(`Worker uncaught exception: ${err.message}`, {
|
|
84
|
+
error: err.message,
|
|
85
|
+
stack: err.stack,
|
|
86
|
+
name: err.name,
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
this.workerThread.on('exit', (code) => {
|
|
90
|
+
if (code === 0) {
|
|
91
|
+
this.logger.info('Worker thread exited successfully with code 0');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.logger.warn(`Worker thread exited with code ${code}`);
|
|
95
|
+
}
|
|
96
|
+
this.workerThread = null;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
const error = err instanceof Error ? err : new Error('Unknown error');
|
|
101
|
+
this.logger.error(`Failed to create worker thread: ${error.message}`, {
|
|
102
|
+
error: error.message,
|
|
103
|
+
stack: error.stack,
|
|
104
|
+
});
|
|
105
|
+
throw err;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.logger.debug('Reusing existing worker thread');
|
|
35
110
|
}
|
|
36
111
|
return this.workerThread;
|
|
37
112
|
}
|
|
38
113
|
registerEvents(cb) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
worker
|
|
42
|
-
|
|
43
|
-
.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
114
|
+
try {
|
|
115
|
+
const worker = this.getWorkerThread();
|
|
116
|
+
this.logger.debug('Registering worker thread event handlers');
|
|
117
|
+
const cleanUp = () => {
|
|
118
|
+
this.logger.debug('Cleaning up worker thread event listeners');
|
|
119
|
+
worker
|
|
120
|
+
.removeListener('message', onMessage)
|
|
121
|
+
.removeListener('exit', onExit);
|
|
122
|
+
};
|
|
123
|
+
const callback = (err, data) => {
|
|
124
|
+
if (err) {
|
|
125
|
+
this.logger.error(`Worker callback error: ${err.message}`, {
|
|
126
|
+
error: err.message,
|
|
127
|
+
stack: err.stack,
|
|
128
|
+
name: err.name,
|
|
129
|
+
});
|
|
130
|
+
if (cb instanceof Worker) {
|
|
131
|
+
this.logger.debug('Emitting worker.error event');
|
|
132
|
+
this.emit('worker.error', err);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
this.logger.debug('Calling error callback');
|
|
136
|
+
cb(err);
|
|
137
|
+
}
|
|
49
138
|
}
|
|
50
|
-
else
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
139
|
+
else {
|
|
140
|
+
this.logger.debug('Worker callback success');
|
|
141
|
+
if (cb instanceof Worker) {
|
|
142
|
+
this.logger.debug('Emitting worker.data event');
|
|
143
|
+
this.emit('worker.data', data);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.logger.debug('Calling success callback');
|
|
147
|
+
cb(null, data);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const onMessage = (msg) => {
|
|
152
|
+
this.logger.debug(`Received message from worker thread with code ${msg.code}`, {
|
|
153
|
+
code: msg.code,
|
|
154
|
+
hasData: msg.data !== undefined,
|
|
155
|
+
hasError: msg.error !== null && msg.error !== undefined,
|
|
156
|
+
});
|
|
157
|
+
cleanUp();
|
|
158
|
+
if (msg.code !== EWorkerThreadChildExecutionCode.OK) {
|
|
159
|
+
const errorCode = EWorkerThreadChildExecutionCode[msg.code] ||
|
|
160
|
+
EWorkerThreadChildExitCode[msg.code] ||
|
|
161
|
+
`Unknown(${msg.code})`;
|
|
162
|
+
this.logger.error(`Worker thread execution error: ${errorCode}`, {
|
|
163
|
+
code: msg.code,
|
|
164
|
+
errorCode,
|
|
165
|
+
error: msg.error,
|
|
166
|
+
});
|
|
167
|
+
callback(new WorkerThreadError(msg));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.logger.debug('Worker thread execution successful');
|
|
171
|
+
callback(null, msg.data);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const onExit = (code) => {
|
|
175
|
+
this.logger.warn(`Worker thread exited unexpectedly with code ${code}`);
|
|
176
|
+
cleanUp();
|
|
177
|
+
const msg = {
|
|
178
|
+
code: EWorkerThreadChildExitCode.TERMINATED,
|
|
179
|
+
error: null,
|
|
180
|
+
};
|
|
181
|
+
this.logger.error('Worker thread terminated', {
|
|
182
|
+
exitCode: code,
|
|
183
|
+
errorCode: EWorkerThreadChildExitCode[EWorkerThreadChildExitCode.TERMINATED],
|
|
184
|
+
});
|
|
63
185
|
callback(new WorkerThreadError(msg));
|
|
64
|
-
}
|
|
65
|
-
else
|
|
66
|
-
callback(null, msg.data);
|
|
67
|
-
};
|
|
68
|
-
const onExit = () => {
|
|
69
|
-
cleanUp();
|
|
70
|
-
const msg = {
|
|
71
|
-
code: EWorkerThreadChildExitCode.TERMINATED,
|
|
72
|
-
error: null,
|
|
73
186
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
187
|
+
worker.once('message', onMessage);
|
|
188
|
+
worker.once('exit', onExit);
|
|
189
|
+
this.logger.debug('Worker thread event handlers registered successfully');
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
this.logger.error(`Failed to register worker thread events: ${err instanceof Error ? err.message : 'unknown error'}`, err);
|
|
193
|
+
throw err;
|
|
194
|
+
}
|
|
78
195
|
}
|
|
79
196
|
postMessage(message) {
|
|
80
|
-
|
|
197
|
+
try {
|
|
198
|
+
this.logger.debug(`Posting message to worker thread: ${EWorkerThreadParentMessage[message.type]}`, {
|
|
199
|
+
messageType: EWorkerThreadParentMessage[message.type],
|
|
200
|
+
hasPayload: 'payload' in message && message.payload !== undefined,
|
|
201
|
+
});
|
|
202
|
+
const worker = this.getWorkerThread();
|
|
203
|
+
worker.postMessage(message);
|
|
204
|
+
this.logger.debug('Message posted successfully to worker thread');
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
const error = err instanceof Error ? err : new Error('Unknown error');
|
|
208
|
+
this.logger.error(`Failed to post message to worker thread: ${error.message}`, {
|
|
209
|
+
error: error.message,
|
|
210
|
+
stack: error.stack,
|
|
211
|
+
messageType: message.type,
|
|
212
|
+
});
|
|
213
|
+
throw err;
|
|
214
|
+
}
|
|
81
215
|
}
|
|
82
216
|
shutdown(cb) {
|
|
217
|
+
this.logger.info('Shutting down worker thread');
|
|
83
218
|
const callback = () => {
|
|
219
|
+
this.logger.info('Worker thread shutdown complete');
|
|
84
220
|
this.workerThread = null;
|
|
85
221
|
cb();
|
|
86
222
|
};
|
|
87
223
|
if (this.workerThread) {
|
|
88
|
-
this.
|
|
224
|
+
this.logger.debug('Terminating active worker thread');
|
|
225
|
+
this.workerThread
|
|
226
|
+
.terminate()
|
|
227
|
+
.then((code) => {
|
|
228
|
+
this.logger.debug(`Worker thread terminated with exit code ${code}`);
|
|
229
|
+
callback();
|
|
230
|
+
})
|
|
231
|
+
.catch((err) => {
|
|
232
|
+
this.logger.error(`Error terminating worker thread: ${err.message}`, {
|
|
233
|
+
error: err.message,
|
|
234
|
+
stack: err.stack,
|
|
235
|
+
});
|
|
236
|
+
callback();
|
|
237
|
+
});
|
|
89
238
|
}
|
|
90
|
-
else
|
|
239
|
+
else {
|
|
240
|
+
this.logger.debug('No active worker thread to terminate');
|
|
91
241
|
cb();
|
|
242
|
+
}
|
|
92
243
|
}
|
|
93
244
|
}
|
|
94
245
|
//# sourceMappingURL=worker.js.map
|