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);
}
return (createAnswer(CONTROL_RESULT_EMPTY, "No config backend."));
}
+ MultiThreadingCriticalSection cs;
+
// Reschedule the periodic CB fetch.
if (TimerMgr::instance()->isTimerRegistered("Dhcp4CBFetchTimer")) {
TimerMgr::instance()->cancel("Dhcp4CBFetchTimer");
// 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);
}
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,
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);
}
return (createAnswer(CONTROL_RESULT_EMPTY, "No config backend."));
}
+ MultiThreadingCriticalSection cs;
+
// Reschedule the periodic CB fetch.
if (TimerMgr::instance()->isTimerRegistered("Dhcp6CBFetchTimer")) {
TimerMgr::instance()->cancel("Dhcp6CBFetchTimer");
// 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);
}
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,
/// @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);
};
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);
};
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);
CfgMultiThreading::extract(multi_threading_config, enabled,
thread_count, queue_size);
- EXPECT_EQ(MultiThreadingMgr::instance().getMode(), enabled);
EXPECT_TRUE(multi_threading_config->equals(*config_elems));
}