From: Jérôme Benoit Date: Fri, 17 Apr 2020 19:06:32 +0000 (+0200) Subject: Set the defaultMaxListeners EventEmitter value at worker init. X-Git-Tag: v1.0.1-0~355 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=6798437b654a296bdd946e8eed37f3dbe036e3cd;p=e-mobility-charging-stations-simulator.git Set the defaultMaxListeners EventEmitter value at worker init. Signed-off-by: Jérôme Benoit --- diff --git a/src/charging-station/Worker.js b/src/charging-station/Worker.js index 5de059d0..7e899d40 100644 --- a/src/charging-station/Worker.js +++ b/src/charging-station/Worker.js @@ -9,13 +9,32 @@ class Wrk { * * @param {String} workerScript * @param {Object} workerData + * @param {Number} numConcurrentWorkers */ - constructor(workerScript, workerData) { + constructor(workerScript, workerData, numConcurrentWorkers) { + this._workerData = workerData; + this._workerScript = workerScript; + this._numConcurrentWorkers = numConcurrentWorkers; if (Configuration.useWorkerPool()) { this._pool = new Pool({max: Configuration.getWorkerPoolSize()}); } - this._workerData = workerData; - this._workerScript = workerScript; + } + + /** + * @param {Number} numConcurrentWorkers + * @private + */ + // eslint-disable-next-line class-methods-use-this + set _numConcurrentWorkers(numConcurrentWorkers) { + if (numConcurrentWorkers > 10) { + EventEmitter.defaultMaxListeners = numConcurrentWorkers + 1; + } + this._concurrentWorkers = numConcurrentWorkers; + } + + // eslint-disable-next-line class-methods-use-this + get _numConcurrentWorkers() { + return this._concurrentWorkers; } /** @@ -60,9 +79,6 @@ class Wrk { */ start() { if (Configuration.useWorkerPool()) { - if (Configuration.getWorkerPoolSize() > 10) { - EventEmitter.defaultMaxListeners = Configuration.getWorkerPoolSize() + 1; - } return this._startWorkerWithPool(); } return this._startWorker(); diff --git a/src/index.js b/src/index.js index a1a5c61b..71edc5a9 100644 --- a/src/index.js +++ b/src/index.js @@ -10,6 +10,7 @@ class Bootstrap { logger.info('%s Configuration: %j', Utils.basicFormatLog(), Configuration.getConfig()); // Start each ChargingStation object in a worker thread if (Configuration.getChargingStationTemplateURLs()) { + let numStationsTotal = 0; Configuration.getChargingStationTemplateURLs().forEach((stationURL) => { try { // load file @@ -17,11 +18,12 @@ class Bootstrap { const stationTemplate = JSON.parse(fs.readFileSync(fileDescriptor, 'utf8')); fs.closeSync(fileDescriptor); const nbStation = (stationURL.numberOfStation ? stationURL.numberOfStation : 0); + numStationsTotal += nbStation; for (let index = 1; index <= nbStation; index++) { const worker = new Wrk('./src/charging-station/StationWorker.js', { index, template: JSON.parse(JSON.stringify(stationTemplate)), - }); + }, numStationsTotal); worker.start(); } } catch (error) { @@ -35,7 +37,7 @@ class Bootstrap { const worker = new Wrk('./src/charging-station/StationWorker.js', { index, template: JSON.parse(JSON.stringify(Configuration.getChargingStationTemplate())), - }); + }, nbStation); worker.start(); } }