Browse Source

[5253] Logging information is now written in config-write.

Tomek Mrugalski 8 years ago
parent
commit
a1b5da4db6
1 changed files with 22 additions and 1 deletions
  1. 22 1
      src/lib/process/d_controller.cc

+ 22 - 1
src/lib/process/d_controller.cc

@@ -449,7 +449,28 @@ DControllerBase::configWriteHandler(const std::string&,
 
     // Ok, it's time to write the file.
     size_t size = 0;
-    ConstElementPtr cfg = process_->getCfgMgr()->getContext()->toElement();
+    ElementPtr cfg = process_->getCfgMgr()->getContext()->toElement();
+
+    // Logging storage is messed up in CA. During its configuration (see
+    // DControllerBase::configFromFile() it calls Daemon::configureLogger()
+    // that stores the logging info in isc::dhcp::CfgMgr::getStagingCfg().
+    // This is later moved to getCurrentCfg() when the configuration is
+    // commited. All control-agent specific configuration is stored in
+    // a structure accessible by process_->getCfgMgr()->getContext(). Note
+    // logging information is not stored there.
+    //
+    // As a result, we need to extract the CA configuration from one
+    // place and logging from another.
+    ConstElementPtr loginfo = isc::dhcp::CfgMgr::instance().getCurrentCfg()->toElement();
+    if (loginfo) {
+        // If there was a config stored in dhcp::CfgMgr, try to get Logging info from it.
+        loginfo = loginfo->get("Logging");
+    }
+    if (loginfo) {
+        // If there is some logging information, add it to our config.
+        cfg->set("Logging", loginfo);
+    }
+
     try {
         size = writeConfigFile(filename, cfg);
     } catch (const isc::Exception& ex) {