]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4145] Reset MT test code
authorThomas Markwalder <tmark@isc.org>
Mon, 20 Oct 2025 17:46:02 +0000 (13:46 -0400)
committerThomas Markwalder <tmark@isc.org>
Mon, 20 Oct 2025 19:54:20 +0000 (19:54 +0000)
new file:   changelog_unreleased/4145-an-empty-config-test-command-can-affect-ha-connections
modified:   src/bin/dhcp4/json_config_parser.cc
modified:   src/bin/dhcp6/json_config_parser.cc
modified:   src/lib/util/multi_threading_mgr.h
modified:   src/lib/util/tests/multi_threading_mgr_unittest.cc

changelog_unreleased/4145-an-empty-config-test-command-can-affect-ha-connections [new file with mode: 0644]
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp6/json_config_parser.cc
src/lib/util/multi_threading_mgr.h
src/lib/util/tests/multi_threading_mgr_unittest.cc

diff --git a/changelog_unreleased/4145-an-empty-config-test-command-can-affect-ha-connections b/changelog_unreleased/4145-an-empty-config-test-command-can-affect-ha-connections
new file mode 100644 (file)
index 0000000..0e0a404
--- /dev/null
@@ -0,0 +1,6 @@
+[bug]          tmark
+       Corrected an issue that was causing an
+       HA peer to not restart its dedicated listener
+       after handling a config-test command.
+       Applies to both kea-dhcp4 and kea-dhcp6.
+       (Gitlab #4145)
index c819e71aa8bebf7a8a1d5aa7afc785589a64ff24..29b068bb65d6a056fd96b463a329bc3a13c5c07b 100644 (file)
@@ -753,9 +753,7 @@ configureDhcp4Server(Dhcpv4Srv& server, isc::data::ConstElementPtr config_set,
     LOG_DEBUG(dhcp4_logger, DBG_DHCP4_COMMAND, DHCP4_CONFIG_START)
         .arg(server.redactConfig(config_set)->str());
 
-    if (check_only) {
-        MultiThreadingMgr::instance().setTestMode(true);
-    }
+    MtTestMode();
 
     auto answer = processDhcp4Config(config_set);
 
index 72a055bf3822f473a923692c01ccc5fc3876b6b7..431f37719b45b82b7a0d9e73c4e4148552df0e3b 100644 (file)
@@ -870,9 +870,7 @@ configureDhcp6Server(Dhcpv6Srv& server, isc::data::ConstElementPtr config_set,
     LOG_DEBUG(dhcp6_logger, DBG_DHCP6_COMMAND, DHCP6_CONFIG_START)
         .arg(server.redactConfig(config_set)->str());
 
-    if (check_only) {
-        MultiThreadingMgr::instance().setTestMode(true);
-    }
+    MtTestMode();
 
     auto answer = processDhcp6Config(config_set);
 
index f761f02effabb7cb289cd77357bdc3da626f0b8c..a9fdc3a8f260941699c802f1333e7efb1822417e 100644 (file)
@@ -387,6 +387,20 @@ public:
     virtual ~MultiThreadingCriticalSection();
 };
 
+/// @brief RAII wrapper for MT test mode.
+///
+/// The constructor enables test mode, the destructor disables it.
+class MtTestMode : public boost::noncopyable {
+public:
+    MtTestMode() {
+        MultiThreadingMgr::instance().setTestMode(true);
+    }
+
+    ~MtTestMode() {
+        MultiThreadingMgr::instance().setTestMode(false);
+    }
+};
+
 }  // namespace util
 }  // namespace isc
 
index 400a7e95c0d465e37ead18ebf8448e40b320fb1a..733c474f0fd826c87781ba469ae68d1d9be42601 100644 (file)
@@ -515,3 +515,14 @@ TEST_F(CriticalSectionCallbackTest, invocationsWithExceptions) {
     // Retest CriticalSections.
     runCriticalSections({}, {});
 }
+
+/// @brief Verifies that the RAII wrapper for MT test mode works.
+TEST_F(CriticalSectionCallbackTest, mtTestMode) {
+    ASSERT_FALSE(MultiThreadingMgr::instance().isTestMode());
+    {
+        MtTestMode mt;
+        ASSERT_TRUE(MultiThreadingMgr::instance().isTestMode());
+    }
+
+    ASSERT_FALSE(MultiThreadingMgr::instance().isTestMode());
+}