]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#1188] addressed review
authorRazvan Becheriu <razvan@isc.org>
Wed, 29 Apr 2020 16:43:24 +0000 (19:43 +0300)
committerRazvan Becheriu <razvan@isc.org>
Thu, 30 Apr 2020 10:53:48 +0000 (13:53 +0300)
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/lib/dhcpsrv/cfg_multi_threading.h
src/lib/dhcpsrv/parsers/multi_threading_config_parser.h
src/lib/dhcpsrv/tests/multi_threading_config_parser_unittest.cc

index 8b4872fa5dfc0bcde3228e0ed9108b01734ebf18..05cbcd99222fac6d9086cf7ff55e9bdd8050daf1 100644 (file)
@@ -415,6 +415,18 @@ ControlledDhcpv4Srv::commandConfigSetHandler(const string&,
         CfgMgr::instance().getCurrentCfg()->applyLoggingCfg();
     }
 
+    // Configure multi threading
+    try {
+        CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
+        if (MultiThreadingMgr::instance().getMode()) {
+            LOG_FATAL(dhcp4_logger, DHCP4_MULTI_THREADING_WARNING);
+        }
+    } catch (const std::exception& ex) {
+        err << "Error applying multi threading settings: "
+            << ex.what();
+        return (isc::config::createAnswer(CONTROL_RESULT_ERROR, err.str()));
+    }
+
     return (result);
 }
 
@@ -584,6 +596,8 @@ ControlledDhcpv4Srv::commandConfigBackendPullHandler(const std::string&,
         return (createAnswer(CONTROL_RESULT_EMPTY, "No config backend."));
     }
 
+    MultiThreadingCriticalSection cs;
+
     // Reschedule the periodic CB fetch.
     if (TimerMgr::instance()->isTimerRegistered("Dhcp4CBFetchTimer")) {
         TimerMgr::instance()->cancel("Dhcp4CBFetchTimer");
@@ -883,18 +897,6 @@ ControlledDhcpv4Srv::processConfig(isc::data::ConstElementPtr config) {
         // operation.
     }
 
-    // Configure multi threading
-    try {
-        CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
-        if (MultiThreadingMgr::instance().getMode()) {
-            LOG_FATAL(dhcp4_logger, DHCP4_MULTI_THREADING_WARNING);
-        }
-    } catch (const std::exception& ex) {
-        err << "Error applying multi threading settings: "
-            << ex.what();
-        return (isc::config::createAnswer(CONTROL_RESULT_ERROR, err.str()));
-    }
-
     return (answer);
 }
 
@@ -1176,6 +1178,8 @@ ControlledDhcpv4Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) {
 void
 ControlledDhcpv4Srv::cbFetchUpdates(const SrvConfigPtr& srv_cfg,
                                     boost::shared_ptr<unsigned> failure_count) {
+    MultiThreadingCriticalSection cs;
+
     try {
         // Fetch any configuration backend updates since our last fetch.
         server_->getCBControl()->databaseConfigFetch(srv_cfg,
index d1ffda7afb376bc99b12c492c2656d030beaf5d5..7e49af0c8cdf28d7061239df6253029f820a960e 100644 (file)
@@ -418,6 +418,18 @@ ControlledDhcpv6Srv::commandConfigSetHandler(const string&,
         CfgMgr::instance().getCurrentCfg()->applyLoggingCfg();
     }
 
+    // Configure multi threading
+    try {
+        CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
+        if (MultiThreadingMgr::instance().getMode()) {
+            LOG_FATAL(dhcp6_logger, DHCP6_MULTI_THREADING_WARNING);
+        }
+    } catch (const std::exception& ex) {
+        err << "Error applying multi threading settings: "
+            << ex.what();
+        return (isc::config::createAnswer(CONTROL_RESULT_ERROR, err.str()));
+    }
+
     return (result);
 }
 
@@ -587,6 +599,8 @@ ControlledDhcpv6Srv::commandConfigBackendPullHandler(const std::string&,
         return (createAnswer(CONTROL_RESULT_EMPTY, "No config backend."));
     }
 
+    MultiThreadingCriticalSection cs;
+
     // Reschedule the periodic CB fetch.
     if (TimerMgr::instance()->isTimerRegistered("Dhcp6CBFetchTimer")) {
         TimerMgr::instance()->cancel("Dhcp6CBFetchTimer");
@@ -904,18 +918,6 @@ ControlledDhcpv6Srv::processConfig(isc::data::ConstElementPtr config) {
         // operation.
     }
 
-    // Configure multi threading
-    try {
-        CfgMultiThreading::apply(CfgMgr::instance().getStagingCfg()->getDHCPMultiThreading());
-        if (MultiThreadingMgr::instance().getMode()) {
-            LOG_FATAL(dhcp6_logger, DHCP6_MULTI_THREADING_WARNING);
-        }
-    } catch (const std::exception& ex) {
-        err << "Error applying multi threading settings: "
-            << ex.what();
-        return (isc::config::createAnswer(CONTROL_RESULT_ERROR, err.str()));
-    }
-
     return (answer);
 }
 
@@ -1194,6 +1196,8 @@ ControlledDhcpv6Srv::dbLostCallback(ReconnectCtlPtr db_reconnect_ctl) {
 void
 ControlledDhcpv6Srv::cbFetchUpdates(const SrvConfigPtr& srv_cfg,
                                     boost::shared_ptr<unsigned> failure_count) {
+    MultiThreadingCriticalSection cs;
+
     try {
         // Fetch any configuration backend updates since our last fetch.
         server_->getCBControl()->databaseConfigFetch(srv_cfg,
index 5eab92e46c7922c3a2a377812f57e26c16dc0e4d..f7e07fa68fafda7aba7bbf41d0a37e267943f3c5 100644 (file)
@@ -26,7 +26,7 @@ public:
     /// @param[in] value The multi-threading configuration
     /// @param[out] enabled The enabled flag
     /// @param[out] thread_count The thread count
-    /// @param[out] queue size The queue size
+    /// @param[out] queue_size The queue size
     static void extract(data::ConstElementPtr value, bool& enabled,
                         uint32_t& thread_count, uint32_t& queue_size);
 };
index 436c5714fad4075bcbe501dc3e7d026c8ada2dd5..bd285acbbedaca174f56d75e9d2b48c14bb8c501 100644 (file)
@@ -17,9 +17,13 @@ namespace dhcp  {
 class MultiThreadingConfigParser : public isc::data::SimpleParser {
 public:
 
-    /// @brief parses JSON structure
+    /// @brief parses JSON structure.
     ///
-    /// @param srv_cfg parsed value will be stored here
+    /// This function stores the 'multi-threading' settings in the server
+    /// configuration and applies the MT mode so that is can be checked when
+    /// parsing 'hooks-libraries'.
+    ///
+    /// @param srv_cfg parsed value will be stored here.
     /// @param value a JSON map that contains multi-threading parameters.
     void parse(SrvConfig& srv_cfg, const isc::data::ConstElementPtr& value);
 };
index 1f3b994bbd59056a42cb2dca56668ef3811f5172..4e750f981731fcbe388cc1a102cc5a5fdff256e4 100644 (file)
@@ -92,6 +92,8 @@ TEST_F(MultiThreadingConfigParserTest, validContent) {
                 ADD_FAILURE() << "parser threw an exception: " << ex.what();
             }
 
+            EXPECT_EQ(MultiThreadingMgr::instance().getMode(), enabled);
+
             multi_threading_config = srv_config.getDHCPMultiThreading();
             // Verify the resultant configuration.
             ASSERT_TRUE(multi_threading_config);
@@ -103,7 +105,6 @@ TEST_F(MultiThreadingConfigParserTest, validContent) {
             CfgMultiThreading::extract(multi_threading_config, enabled,
                                        thread_count, queue_size);
 
-            EXPECT_EQ(MultiThreadingMgr::instance().getMode(), enabled);
 
             EXPECT_TRUE(multi_threading_config->equals(*config_elems));
         }