Browse Source

[5315] Config Manager now returns non-const pointer to current config.

Marcin Siodelski 7 years ago
parent
commit
433313ef4c
2 changed files with 21 additions and 5 deletions
  1. 1 1
      src/lib/dhcpsrv/cfgmgr.cc
  2. 20 4
      src/lib/dhcpsrv/cfgmgr.h

+ 1 - 1
src/lib/dhcpsrv/cfgmgr.cc

@@ -150,7 +150,7 @@ CfgMgr::revert(const size_t index) {
     commit();
 }
 
-ConstSrvConfigPtr
+SrvConfigPtr
 CfgMgr::getCurrentCfg() {
     ensureCurrentAllocated();
     return (configuration_);

+ 20 - 4
src/lib/dhcpsrv/cfgmgr.h

@@ -196,10 +196,26 @@ public:
     ///
     /// This function returns pointer to the current configuration. If the
     /// current configuration is not set it will create a default configuration
-    /// and return it. Current configuration returned is read-only.
-    ///
-    /// @return Non-null const pointer to the current configuration.
-    ConstSrvConfigPtr getCurrentCfg();
+    /// and return it.
+    ///
+    /// In the previous Kea releases this method used to return a const pointer
+    /// to the current configuration to ensure that it is not accidentally
+    /// modified while the server is running. This has been changed in Kea 1.3
+    /// release and now this function returns a non-const pointer. The reason
+    /// is that there are certain use cases when current configuration must
+    /// be modified without going through a full cycle of server
+    /// reconfiguration, e.g. add a subnet to the current configuration as
+    /// a result of receiving a command over control API. In such case the
+    /// performance of processing such command is critical and rebuilding the
+    /// whole configuration just for this small configuration change is out
+    /// of question.
+    ///
+    /// Nevertheless, such configuration updates should always be made with
+    /// caution and one has to make sure that the configuration data integrity
+    /// is preserved.
+    ///
+    /// @return Non-null pointer to the current configuration.
+    SrvConfigPtr getCurrentCfg();
 
     /// @brief Returns a pointer to the staging configuration.
     ///