]> granicus.if.org Git - icinga2/commitdiff
Remove commentsand downtimes with reference to deleted checkable objects
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 31 Mar 2016 11:29:08 +0000 (13:29 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 3 May 2016 09:30:02 +0000 (11:30 +0200)
Silence the warning message and change the log level to notice as well.

fixes #10717

lib/cli/daemonutility.cpp
lib/config/configitem.cpp
lib/config/configitem.hpp

index a6fe4555fd3c7833605af31f9f85d8c363525b7a..84470cfab49a0e51cc3dfe2e1e9ff7e3175a3b1d 100644 (file)
@@ -24,6 +24,7 @@
 #include "config/configcompiler.hpp"
 #include "config/configcompilercontext.hpp"
 #include "config/configitembuilder.hpp"
+#include "remote/configobjectutility.hpp"
 
 
 using namespace icinga;
@@ -168,6 +169,9 @@ bool DaemonUtility::LoadConfigFiles(const std::vector<std::string>& configs,
        WorkQueue upq(25000, Application::GetConcurrency());
        bool result = ConfigItem::CommitItems(ascope.GetContext(), upq, newItems);
 
+       /* Remove ignored Downtime/Comment objects. */
+       ConfigItem::RemoveIgnoredItems(ConfigObjectUtility::GetConfigDir());
+
        if (!result)
                return false;
 
index 03ff2596a1f8ca78db433e1427dfa068869baf9c..59e58ce1dc7ed0a8833de1b8f0691aedc61e8394 100644 (file)
@@ -44,6 +44,7 @@ using namespace icinga;
 boost::mutex ConfigItem::m_Mutex;
 ConfigItem::TypeMap ConfigItem::m_Items;
 ConfigItem::ItemList ConfigItem::m_UnnamedItems;
+ConfigItem::IgnoredItemList ConfigItem::m_IgnoredItems;
 
 REGISTER_SCRIPTFUNCTION(__run_with_activation_context, &ConfigItem::RunWithActivationContext);
 
@@ -190,9 +191,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
                m_Expression->Evaluate(frame, &debugHints);
        } catch (const std::exception& ex) {
                if (m_IgnoreOnError) {
-                       Log(LogWarning, "ConfigObject")
+                       Log(LogNotice, "ConfigObject")
                            << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
 
+                       m_IgnoredItems.push_back(m_DebugInfo.Path);
+
                        return ConfigObject::Ptr();
                }
 
@@ -234,9 +237,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
                dobj->Validate(FAConfig, utils);
        } catch (ValidationError& ex) {
                if (m_IgnoreOnError) {
-                       Log(LogWarning, "ConfigObject")
+                       Log(LogNotice, "ConfigObject")
                            << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
 
+                       m_IgnoredItems.push_back(m_DebugInfo.Path);
+
                        return ConfigObject::Ptr();
                }
 
@@ -248,9 +253,11 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
                dobj->OnConfigLoaded();
        } catch (const std::exception& ex) {
                if (m_IgnoreOnError) {
-                       Log(LogWarning, "ConfigObject")
+                       Log(LogNotice, "ConfigObject")
                            << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
 
+                       m_IgnoredItems.push_back(m_DebugInfo.Path);
+
                        return ConfigObject::Ptr();
                }
 
@@ -359,11 +366,13 @@ void ConfigItem::OnAllConfigLoadedHelper(void)
                m_Object->OnAllConfigLoaded();
        } catch (const std::exception& ex) {
                if (m_IgnoreOnError) {
-                       Log(LogWarning, "ConfigObject")
+                       Log(LogNotice, "ConfigObject")
                            << "Ignoring config object '" << m_Name << "' of type '" << m_Type << "' due to errors: " << DiagnosticInformation(ex);
 
                        Unregister();
 
+                       m_IgnoredItems.push_back(m_DebugInfo.Path);
+
                        return;
                }
 
@@ -630,3 +639,23 @@ std::vector<ConfigItem::Ptr> ConfigItem::GetItems(const String& type)
 
        return items;
 }
+
+void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath)
+{
+       BOOST_FOREACH(const String& path, m_IgnoredItems) {
+               if (path.Find(allowedConfigPath) == String::NPos)
+                       continue;
+
+               Log(LogNotice, "ConfigItem")
+                   << "Removing ignored item path '" << path << "'.";
+
+               if (unlink(path.CStr()) < 0) {
+                       BOOST_THROW_EXCEPTION(posix_error()
+                           << boost::errinfo_api_function("unlink")
+                           << boost::errinfo_errno(errno)
+                           << boost::errinfo_file_name(path));
+               }
+       }
+
+       m_IgnoredItems.clear();
+}
index 3bfb953348e44baed5416537559fd4297333c9bf..b9c23d0756e1fe20839cfae9a89c7a2b67f32d50 100644 (file)
@@ -75,6 +75,8 @@ public:
 
        static std::vector<ConfigItem::Ptr> GetItems(const String& type);
 
+       static void RemoveIgnoredItems(const String& allowedConfigPath);
+
 private:
        String m_Type; /**< The object type. */
        String m_Name; /**< The name. */
@@ -99,7 +101,9 @@ private:
 
        typedef std::vector<ConfigItem::Ptr> ItemList;
        static ItemList m_UnnamedItems;
-       static ItemList m_CommittedItems;
+
+       typedef std::vector<String> IgnoredItemList;
+       static IgnoredItemList m_IgnoredItems;
 
        static ConfigItem::Ptr GetObjectUnlocked(const String& type,
            const String& name);