Skip to content
Permalink
Browse files

Remove commentsand downtimes with reference to deleted checkable objects

Silence the warning message and change the log level to notice as well.

fixes #10717
  • Loading branch information...
dnsmichi committed Mar 31, 2016
1 parent 23ab6cf commit 2faf121ff459cddd1715cce881fba13dc7c26a47
Showing with 42 additions and 5 deletions.
  1. +4 −0 lib/cli/daemonutility.cpp
  2. +33 −4 lib/config/configitem.cpp
  3. +5 −1 lib/config/configitem.hpp
@@ -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;

@@ -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();
}
@@ -75,6 +75,8 @@ class I2_CONFIG_API ConfigItem : public Object {

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 @@ class I2_CONFIG_API ConfigItem : public Object {

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);

0 comments on commit 2faf121

Please sign in to comment.
You can’t perform that action at this time.