From 57f02f31a5b3b652eec7b3de03c2f4d58cb30d27 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 20 Jan 2024 20:49:51 -0500 Subject: [PATCH] Dont flush settings on exit after import (#1179) Fixes bug when importing settings zip that would have the new settings be over written, and would not actually update --- .../common/configuration/ConfigManager.java | 19 +++++++++++++++++++ .../common/hardware/HardwareManager.java | 3 +-- .../photonvision/server/RequestHandler.java | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/common/configuration/ConfigManager.java b/photon-core/src/main/java/org/photonvision/common/configuration/ConfigManager.java index 73fd9a4c0..8a9ef7492 100644 --- a/photon-core/src/main/java/org/photonvision/common/configuration/ConfigManager.java +++ b/photon-core/src/main/java/org/photonvision/common/configuration/ConfigManager.java @@ -50,6 +50,10 @@ public class ConfigManager { private final Thread settingsSaveThread; private long saveRequestTimestamp = -1; + // special case flag to disable flushing settings to disk at shutdown. Avoids the jvm shutdown + // hook overwriting the settings we just uploaded + private boolean flushOnShutdown = true; + enum ConfigSaveStrategy { SQL, LEGACY, @@ -303,4 +307,19 @@ public class ConfigManager { if (!ret.exists()) ret.mkdirs(); return ret; } + + /** + * Disable flushing settings to disk as part of our JVM exit hook. Used to prevent uploading all + * settings from getting its new configs overwritten at program exit and before theyre all loaded. + */ + public void disableFlushOnShutdown() { + this.flushOnShutdown = false; + } + + public void onJvmExit() { + if (flushOnShutdown) { + logger.info("Force-flushing settings..."); + saveToDisk(); + } + } } diff --git a/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java b/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java index dcb0ac69d..166e265c6 100644 --- a/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java +++ b/photon-core/src/main/java/org/photonvision/common/hardware/HardwareManager.java @@ -145,8 +145,7 @@ public class HardwareManager { logger.info("Shutting down LEDs..."); if (visionLED != null) visionLED.setState(false); - logger.info("Force-flushing settings..."); - ConfigManager.getInstance().saveToDisk(); + ConfigManager.getInstance().onJvmExit(); } public boolean restartDevice() { diff --git a/photon-server/src/main/java/org/photonvision/server/RequestHandler.java b/photon-server/src/main/java/org/photonvision/server/RequestHandler.java index 1b2962c22..87eeb37f4 100644 --- a/photon-server/src/main/java/org/photonvision/server/RequestHandler.java +++ b/photon-server/src/main/java/org/photonvision/server/RequestHandler.java @@ -94,6 +94,7 @@ public class RequestHandler { ctx.status(200); ctx.result("Successfully saved the uploaded settings zip, rebooting..."); logger.info("Successfully saved the uploaded settings zip, rebooting..."); + ConfigManager.getInstance().disableFlushOnShutdown(); restartProgram(); } else { ctx.status(500);