From 471e530aa5babed0d75ca5a4859ff58dae62e542 Mon Sep 17 00:00:00 2001 From: Eduardo Pinho Date: Wed, 24 Apr 2024 21:01:28 +0100 Subject: [PATCH] [core] Add kill switch for dead plugin sets (#686) JVM property `dicoogle.deadPluginKillSwitch`. If true, any dead plugin will kill the process --- .../pt/ua/dicoogle/plugins/PluginController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dicoogle/src/main/java/pt/ua/dicoogle/plugins/PluginController.java b/dicoogle/src/main/java/pt/ua/dicoogle/plugins/PluginController.java index 62b7acde7..7dd980c00 100755 --- a/dicoogle/src/main/java/pt/ua/dicoogle/plugins/PluginController.java +++ b/dicoogle/src/main/java/pt/ua/dicoogle/plugins/PluginController.java @@ -89,6 +89,9 @@ public synchronized static PluginController getInstance() { private TaskManager taskManagerQueries = new TaskManager(Integer.parseInt(System.getProperty("dicoogle.taskManager.nQueryThreads", "4"))); + /** Whether to shut down Dicoogle when a plugin is marked as dead */ + private static boolean DEAD_PLUGIN_KILL_SWITCH = + System.getProperty("dicoogle.deadPluginKillSwitch", "false").equalsIgnoreCase("true"); public PluginController(File pathToPluginDirectory) { logger.info("Creating PluginController Instance"); @@ -172,9 +175,14 @@ private void configurePlugins() { logger.warn("Plugin set name cannot be retrieved: {}", ex2.getMessage()); name = "UNKNOWN"; } - logger.error("Unexpected error while loading plugin set {}. Plugin set marked as dead.", name, e); - this.deadPluginSets.add(new DeadPlugin(name, e)); - it.remove(); + if (DEAD_PLUGIN_KILL_SWITCH) { + logger.error("Unexpected error while loading plugin set {}. Dicoogle will shut down.", name, e); + System.exit(-4); + } else { + logger.error("Unexpected error while loading plugin set {}. Plugin set marked as dead.", name, e); + this.deadPluginSets.add(new DeadPlugin(name, e)); + it.remove(); + } } } logger.debug("Settings pushed to plugins");