From 93f19d3e08e1ce3a9c85ffaaa4b43e62dd80421b Mon Sep 17 00:00:00 2001 From: Loic Date: Wed, 18 Oct 2023 15:46:03 +0200 Subject: [PATCH] [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);