From 93f19d3e08e1ce3a9c85ffaaa4b43e62dd80421b Mon Sep 17 00:00:00 2001 From: Loic Date: Wed, 18 Oct 2023 15:46:03 +0200 Subject: [PATCH 1/5] [fix] disconnect all sources (so bases) when a restart is asked --- src/js/base/base.js | 2 +- src/js/base/baseManager.js | 1 + src/js/service/service.js | 33 ++++++++++++++++++++++++++++++-- src/js/service/serviceInsider.js | 9 ++++++++- src/js/sources/pgrSource.js | 4 ++++ src/js/sources/sourceManager.js | 1 + 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/js/base/base.js b/src/js/base/base.js index b20e576..8efc827 100644 --- a/src/js/base/base.js +++ b/src/js/base/base.js @@ -80,7 +80,7 @@ module.exports = class Base { if (this._pool) { await this._pool.connect(); - LOGGER.info("Connecte a la base de données"); + LOGGER.info("Pool connecté à la base"); this._connected = true; } else { throw errorManager.createError("PG is not available"); diff --git a/src/js/base/baseManager.js b/src/js/base/baseManager.js index bbe8201..e10c69b 100644 --- a/src/js/base/baseManager.js +++ b/src/js/base/baseManager.js @@ -168,6 +168,7 @@ module.exports = class baseManager { // on vérifie d'abord que la base n'a pas déjà été créée if (this._baseCatalog[dbConfigPath]) { + LOGGER.debug("Base's already loaded"); return true; } else { // TODO la base n'existe pas, on vérifie que le contenu de la conf n'est pas le même qu'une base déjà chargée. diff --git a/src/js/service/service.js b/src/js/service/service.js index be7c5b3..5b886be 100644 --- a/src/js/service/service.js +++ b/src/js/service/service.js @@ -882,6 +882,28 @@ module.exports = class Service { } + /** + * + * @function + * @name disconnectSources + * @description Déconnecter toutes les sources du service + * + */ + async disconnectSources() { + + LOGGER.info("Déonnexion des sources du service..."); + + // Connexion des sources + if (!(await this._sourceManager.disconnectAllSources())) { + LOGGER.fatal("Impossible de déconnecter toutes les sources du service"); + return false; + } else { + LOGGER.info("Les sources du service potentiellement connectables ont été déconnectées"); + return true; + } + + } + /** * * @function @@ -1027,13 +1049,20 @@ module.exports = class Service { LOGGER.debug("Réception du signal SIGTERM pour arrêter le service"); if (await this.stopServers()) { - LOGGER.debug("Les serveurs sont bien arrêtés, on peut sortir du service (exit)") - process.exit(0); + LOGGER.debug("Les serveurs sont bien arrêtés"); } else { LOGGER.fatal("Les serveurs ne se sont pas bien arrếtés"); process.exit(1); } + if (await this.disconnectSources()) { + LOGGER.debug("Les sources sont bien déconnectées, on peut sortir du service (exit)"); + process.exit(0); + } else { + LOGGER.fatal("Les sources ne se sont pas bien déconnectées"); + process.exit(2); + } + }); } diff --git a/src/js/service/serviceInsider.js b/src/js/service/serviceInsider.js index 1c100bb..a8ce4bf 100644 --- a/src/js/service/serviceInsider.js +++ b/src/js/service/serviceInsider.js @@ -168,7 +168,14 @@ module.exports = class ServiceInsider extends ServiceAdministered { LOGGER.debug("Arrêt d'un service dans le même processus"); if (await this._serviceInstance.stopServers()) { - LOGGER.debug("Service arrêté."); + LOGGER.debug("Servers arrêtés."); + } else { + LOGGER.error("Le service n'a pu être arrêté"); + return false; + } + + if (await this._serviceInstance.disconnectSources()) { + LOGGER.debug("Sources déconnectées."); this._serviceInstance = null; return true; } else { diff --git a/src/js/sources/pgrSource.js b/src/js/sources/pgrSource.js index 2efb414..a52931f 100644 --- a/src/js/sources/pgrSource.js +++ b/src/js/sources/pgrSource.js @@ -140,8 +140,11 @@ module.exports = class pgrSource extends Source { */ async connect() { + LOGGER.debug("Connexion to the base asked from a pgrSource..."); + if (!this._base.connected) { + LOGGER.debug("pgrSource need to connect itself to the base"); // Connection à la base de données try { @@ -157,6 +160,7 @@ module.exports = class pgrSource extends Source { } else { // Road2 est déjà connecté à la base + LOGGER.debug("pgrSource's already connected to the base"); this._connected = true; } diff --git a/src/js/sources/sourceManager.js b/src/js/sources/sourceManager.js index 8b23b6f..d580fe5 100644 --- a/src/js/sources/sourceManager.js +++ b/src/js/sources/sourceManager.js @@ -942,6 +942,7 @@ module.exports = class sourceManager { return false; } else { base = this._baseManager.getBase(sourceJsonObject.storage.base.dbConfig); + LOGGER.debug("Récuperation de la base configurée dans : " + sourceJsonObject.storage.base.dbConfig); } // Création de la source source = new pgrSource(sourceJsonObject, base); From bc7903f99e4d5b0904b0a6f1e324f72de47fe85d Mon Sep 17 00:00:00 2001 From: jmkerloch Date: Wed, 18 Oct 2023 18:15:12 +0200 Subject: [PATCH 2/5] [fix] add disconnection of sources in sourceManager --- src/js/service/service.js | 2 +- src/js/sources/sourceManager.js | 83 +++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/src/js/service/service.js b/src/js/service/service.js index 5b886be..bb20f66 100644 --- a/src/js/service/service.js +++ b/src/js/service/service.js @@ -898,7 +898,7 @@ module.exports = class Service { LOGGER.fatal("Impossible de déconnecter toutes les sources du service"); return false; } else { - LOGGER.info("Les sources du service potentiellement connectables ont été déconnectées"); + LOGGER.info("Les sources du service potentiellement déconnectables ont été déconnectées"); return true; } diff --git a/src/js/sources/sourceManager.js b/src/js/sources/sourceManager.js index d580fe5..884f78b 100644 --- a/src/js/sources/sourceManager.js +++ b/src/js/sources/sourceManager.js @@ -994,6 +994,33 @@ module.exports = class sourceManager { } + /** + * + * @function + * @name disconnectSource + * @description Fonction utilisée pour déconnecter une source. + * @param {string} sourceId - Id de la source que l'on veut déconnecter + * + */ + async disconnectSource(sourceId) { + + LOGGER.info("Déconnection de la source: " + sourceId); + + try { + + await this._sources[sourceId].disconnect(); + LOGGER.info("Source déconnectee."); + return true; + + } catch (err) { + + LOGGER.error("Impossible de déconnecter la source.", err); + return false; + + } + + } + /** * * @function @@ -1052,4 +1079,60 @@ module.exports = class sourceManager { } + /** + * + * @function + * @name disconnectAllSources + * @description Déconnecter l'ensemble des sources disponibles dans le manager + * + */ + async disconnectAllSources() { + + LOGGER.info("Déconnection de l'ensemble des sources..."); + + if (this._loadedSourceId.length === 0) { + LOGGER.warn("Aucune source n'est disponible"); + return true; + } + + try { + assert.deepStrictEqual(this._loadedSourceConfiguration, {}); + LOGGER.error("Aucune source n'a été préalablement chargée"); + return false; + } catch (err) { + // tout va bien + } + + let nbSourceDisconnected = 0; + + for (let i = 0; i < this._loadedSourceId.length; i++) { + + LOGGER.info("Source : " + this._loadedSourceId[i]); + + if (!(await this.disconnectSource(this._loadedSourceId[i]))) { + + LOGGER.error("Source " + this._loadedSourceId[i] + " non déconnectée"); + return false; + + } else { + + LOGGER.info("Source " + this._loadedSourceId[i] + " déconnectée"); + nbSourceDisconnected++; + + } + + } + + LOGGER.info("Les déconnections se sont bien déroulés."); + + if (nbSourceDisconnected === 0) { + LOGGER.error("Aucune source n'a pu être déconnectée"); + return false; + } else { + LOGGER.info("Au moins une source a été déconnectée"); + return true; + } + + } + } From 4f97b222a316fa1ed616be954a3f07e5ce71903f Mon Sep 17 00:00:00 2001 From: jmkerloch Date: Thu, 19 Oct 2023 09:41:36 +0200 Subject: [PATCH 3/5] feat(changelog): update to 2.2.3 --- changelog.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 99e4781..72f7252 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # CHANGELOG +## 2.2.3 +FIXED: +- Sources were not disconnected during a restart #93 + ## 2.2.2 FIXED: - Route requests not working with pgr resources diff --git a/package.json b/package.json index 26f0edd..55b19da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "road2", - "version": "2.2.2", + "version": "2.2.3", "description": "Calcul d'itinéraire", "author": "RDEV - IGN", "main": "src/js/road2.js", From 0ae5212a6bbfe6ddd7994a31159fc72f081c3385 Mon Sep 17 00:00:00 2001 From: jmkerloch Date: Thu, 19 Oct 2023 09:54:53 +0200 Subject: [PATCH 4/5] =?UTF-8?q?fix(typo):=20use=20D=C3=A9connexion=20inste?= =?UTF-8?q?ad=20of=20Deconnection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/js/base/base.js | 6 +++--- src/js/service/service.js | 2 +- src/js/sources/pgrSource.js | 8 ++++---- src/js/sources/sourceManager.js | 6 +++--- src/js/sources/valhallaSource.js | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/js/base/base.js b/src/js/base/base.js index 8efc827..903ed33 100644 --- a/src/js/base/base.js +++ b/src/js/base/base.js @@ -101,19 +101,19 @@ module.exports = class Base { * * @function * @name disconnect - * @description Déconnection à la base pgRouting + * @description Déconnexion à la base pgRouting * */ async disconnect() { try { - LOGGER.info("Deconnection de la base..."); + LOGGER.info("Déconnexion de la base..."); if (this._pool) { await this._pool.end(() => { - LOGGER.info("Deconnection du pool effectuee"); + LOGGER.info("Déconnexion du pool effectuee"); }); this._connected = false; diff --git a/src/js/service/service.js b/src/js/service/service.js index bb20f66..e444041 100644 --- a/src/js/service/service.js +++ b/src/js/service/service.js @@ -891,7 +891,7 @@ module.exports = class Service { */ async disconnectSources() { - LOGGER.info("Déonnexion des sources du service..."); + LOGGER.info("Déconnexion des sources du service..."); // Connexion des sources if (!(await this._sourceManager.disconnectAllSources())) { diff --git a/src/js/sources/pgrSource.js b/src/js/sources/pgrSource.js index a52931f..fcb56e2 100644 --- a/src/js/sources/pgrSource.js +++ b/src/js/sources/pgrSource.js @@ -171,24 +171,24 @@ module.exports = class pgrSource extends Source { * * @function * @name disconnect - * @description Déconnection à la base pgRouting + * @description Déconnexion à la base pgRouting * */ async disconnect() { - LOGGER.info("Tentative de deconnection de la base..."); + LOGGER.info("Tentative de déconnexion de la base..."); if (this._base.connected) { try { await this._base.disconnect(); - LOGGER.info("Deconnection de la base effectuee"); + LOGGER.info("Déconnexion de la base effectuee"); this._connected = false; } catch(err) { - LOGGER.error('deconnection error', err.stack); + LOGGER.error('disconnection error', err.stack); throw errorManager.createError("Cannot disconnect to source database"); } diff --git a/src/js/sources/sourceManager.js b/src/js/sources/sourceManager.js index 884f78b..fa8b192 100644 --- a/src/js/sources/sourceManager.js +++ b/src/js/sources/sourceManager.js @@ -1004,7 +1004,7 @@ module.exports = class sourceManager { */ async disconnectSource(sourceId) { - LOGGER.info("Déconnection de la source: " + sourceId); + LOGGER.info("Déconnexion de la source: " + sourceId); try { @@ -1088,7 +1088,7 @@ module.exports = class sourceManager { */ async disconnectAllSources() { - LOGGER.info("Déconnection de l'ensemble des sources..."); + LOGGER.info("Déconnexion de l'ensemble des sources..."); if (this._loadedSourceId.length === 0) { LOGGER.warn("Aucune source n'est disponible"); @@ -1123,7 +1123,7 @@ module.exports = class sourceManager { } - LOGGER.info("Les déconnections se sont bien déroulés."); + LOGGER.info("Les déconnexions se sont bien déroulés."); if (nbSourceDisconnected === 0) { LOGGER.error("Aucune source n'a pu être déconnectée"); diff --git a/src/js/sources/valhallaSource.js b/src/js/sources/valhallaSource.js index b02250d..b15adb5 100644 --- a/src/js/sources/valhallaSource.js +++ b/src/js/sources/valhallaSource.js @@ -96,7 +96,7 @@ module.exports = class valhallaSource extends Source { * * @function * @name disconnect - * @description Déconnection + * @description Déconnexion * */ async disconnect() { From f50a6e2e2ace0a0584e5a2a960ed32d30fea0aea Mon Sep 17 00:00:00 2001 From: jmkerloch Date: Thu, 19 Oct 2023 09:57:47 +0200 Subject: [PATCH 5/5] fix(typo): connection instead of connexion --- src/js/sources/pgrSource.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/sources/pgrSource.js b/src/js/sources/pgrSource.js index fcb56e2..9e4033f 100644 --- a/src/js/sources/pgrSource.js +++ b/src/js/sources/pgrSource.js @@ -140,7 +140,7 @@ module.exports = class pgrSource extends Source { */ async connect() { - LOGGER.debug("Connexion to the base asked from a pgrSource..."); + LOGGER.debug("Connection to the base asked from a pgrSource..."); if (!this._base.connected) {