From cb07eb62c0b610297c6f4d9591b6ab616088e158 Mon Sep 17 00:00:00 2001 From: marcus o'flaherty Date: Wed, 5 Aug 2026 18:52:51 +0000 Subject: [PATCH 1/2] add ResetConfigIDs method to reset internal variables of last base and runmode config IDs. Remove call to SetValue in LoadConfigSlowControlFunc as this would result in infinite recursion with updated implementation --- src/ServiceDiscovery/Services.cpp | 22 ++++++++++++++-------- src/ServiceDiscovery/Services.h | 5 +++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index bf90741..fa50b9d 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -11,6 +11,8 @@ Services::Services(){ m_context=0; m_name=""; m_verbose=false; + m_base_config_id=0; + m_run_mode_config_id=0; } @@ -1168,8 +1170,8 @@ bool Services::LoadConfigAlertFunc(const char* alert, const char* payload){ Store tmp; tmp.JsonParser(payload); - uint64_t base_config_id=0; - uint64_t run_mode_config_id=0; + uint32_t base_config_id=0; + uint32_t run_mode_config_id=0; short count = 0; tmp.Get("Base",base_config_id); @@ -1200,8 +1202,8 @@ std::string Services::LoadConfigSlowControlFunc(const char* control){ std::string payload = (*sc_vars)[control]->GetValue(); Store tmp; tmp.JsonParser(payload); - uint64_t base_config_id=0; - uint64_t run_mode_config_id=0; + uint32_t base_config_id=0; + uint32_t run_mode_config_id=0; short count = 0; std::stringstream ret; @@ -1222,7 +1224,7 @@ std::string Services::LoadConfigSlowControlFunc(const char* control){ if(count==5){ ret <<"Failed to load config "<SetValue(1); @@ -1231,13 +1233,17 @@ std::string Services::LoadConfigSlowControlFunc(const char* control){ ret <<"Loaded config "<SetValue(""); - return ret.str(); } +void Services::ResetConfigIDs(){ + // reset the active configuration numbers so that the next ChangeConfig alert will invoke the callback. + m_base_config_id = 0; + m_run_mode_config_id = 0; + return; +} + // ======================== void Services::BufferThread(Thread_args* args){ diff --git a/src/ServiceDiscovery/Services.h b/src/ServiceDiscovery/Services.h index d41ba0c..42a42a8 100644 --- a/src/ServiceDiscovery/Services.h +++ b/src/ServiceDiscovery/Services.h @@ -112,6 +112,7 @@ namespace ToolFramework { bool AddSlowControlVariable(std::string name, SlowControlElementType type, std::function change_function=nullptr, std::function read_function=nullptr); bool RemoveSlowControlVariable(std::string name); void ClearSlowControlVariables(); + void ResetConfigIDs(); bool AlertSubscribe(std::string alert, std::function function); bool AlertSend(std::string alert, std::string payload); @@ -141,8 +142,8 @@ namespace ToolFramework { bool m_verbose; zmq::context_t* m_context; ServicesBackend m_backend_client; - uint64_t m_base_config_id; - uint64_t m_run_mode_config_id; + uint32_t m_base_config_id; + uint32_t m_run_mode_config_id; std::string m_local_config; Utilities m_utils; From e643705176f184035a5bd2106c9ebe89e32087fb Mon Sep 17 00:00:00 2001 From: marcus o'flaherty Date: Thu, 6 Aug 2026 14:39:41 +0000 Subject: [PATCH 2/2] change config ids back to 64-bit, so we do not get caught with our pants down when someone makes the 4294967295th detector configuration --- src/ServiceDiscovery/Services.cpp | 8 ++++---- src/ServiceDiscovery/Services.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ServiceDiscovery/Services.cpp b/src/ServiceDiscovery/Services.cpp index fa50b9d..28373ab 100644 --- a/src/ServiceDiscovery/Services.cpp +++ b/src/ServiceDiscovery/Services.cpp @@ -1170,8 +1170,8 @@ bool Services::LoadConfigAlertFunc(const char* alert, const char* payload){ Store tmp; tmp.JsonParser(payload); - uint32_t base_config_id=0; - uint32_t run_mode_config_id=0; + uint64_t base_config_id=0; + uint64_t run_mode_config_id=0; short count = 0; tmp.Get("Base",base_config_id); @@ -1202,8 +1202,8 @@ std::string Services::LoadConfigSlowControlFunc(const char* control){ std::string payload = (*sc_vars)[control]->GetValue(); Store tmp; tmp.JsonParser(payload); - uint32_t base_config_id=0; - uint32_t run_mode_config_id=0; + uint64_t base_config_id=0; + uint64_t run_mode_config_id=0; short count = 0; std::stringstream ret; diff --git a/src/ServiceDiscovery/Services.h b/src/ServiceDiscovery/Services.h index 42a42a8..0a4f4e7 100644 --- a/src/ServiceDiscovery/Services.h +++ b/src/ServiceDiscovery/Services.h @@ -142,8 +142,8 @@ namespace ToolFramework { bool m_verbose; zmq::context_t* m_context; ServicesBackend m_backend_client; - uint32_t m_base_config_id; - uint32_t m_run_mode_config_id; + uint64_t m_base_config_id; + uint64_t m_run_mode_config_id; std::string m_local_config; Utilities m_utils;