]> granicus.if.org Git - icinga2/commitdiff
ido: Clear config tables on startup
authorMichael Friedrich <michael.friedrich@netways.de>
Fri, 2 Aug 2013 15:11:14 +0000 (17:11 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Fri, 2 Aug 2013 15:11:14 +0000 (17:11 +0200)
fixes #4502

components/ido_mysql/mysqldbconnection.cpp
components/ido_mysql/mysqldbconnection.h

index 333c079c4bf45cbb19cb134de739033be31b56d2..36a97dbf8f08b8aade010142a613e32c7533b1ce 100644 (file)
@@ -135,6 +135,8 @@ void MysqlDbConnection::ReconnectTimerHandler(void)
                msgbuf << "MySQL IDO instance id: " << static_cast<long>(m_InstanceID);
                Log(LogInformation, "ido_mysql", msgbuf.str());
 
+               ClearConfigTables();
+
                Query("UPDATE " + GetTablePrefix() + "objects SET is_active = 0");
 
                std::ostringstream q1buf;
@@ -158,6 +160,38 @@ void MysqlDbConnection::ReconnectTimerHandler(void)
        UpdateAllObjects();
 }
 
+void MysqlDbConnection::ClearConfigTables(void)
+{
+       /* TODO make hardcoded table names modular */
+       ClearConfigTable("commands");
+       ClearConfigTable("contact_addresses");
+       ClearConfigTable("contact_notificationcommands");
+       ClearConfigTable("contactgroup_members");
+       ClearConfigTable("contactgroups");
+       ClearConfigTable("contacts");
+       ClearConfigTable("customvariables");
+       ClearConfigTable("host_contactgroups");
+       ClearConfigTable("host_contacts");
+       ClearConfigTable("host_parenthosts");
+       ClearConfigTable("hostdependencies");
+       ClearConfigTable("hostgroup_members");
+       ClearConfigTable("hostgroups");
+       ClearConfigTable("hosts");
+       ClearConfigTable("service_contactgroups");
+       ClearConfigTable("service_contacts");
+       ClearConfigTable("servicedependencies");
+       ClearConfigTable("servicegroup_members");
+       ClearConfigTable("servicegroups");
+       ClearConfigTable("services");
+       ClearConfigTable("timeperiod_timeranges");
+       ClearConfigTable("timeperiods");
+}
+
+void MysqlDbConnection::ClearConfigTable(const String& table)
+{
+       Query("DELETE FROM " + GetTablePrefix() + table + " WHERE instance_id = " + Convert::ToString(static_cast<long>(m_InstanceID)));
+}
+
 Array::Ptr MysqlDbConnection::Query(const String& query)
 {
        Log(LogDebug, "ido_mysql", "Query: " + query);
@@ -325,7 +359,7 @@ bool MysqlDbConnection::FieldToEscapedString(const String& key, const Value& val
 
                *result = static_cast<long>(dbrefcol);
        } else if (DbValue::IsTimestamp(value)) {
-               long ts = rawvalue; 
+               long ts = rawvalue;
                std::ostringstream msgbuf;
                msgbuf << "FROM_UNIXTIME(" << ts << ")";
                *result = Value(msgbuf.str());
index 5d71dc2e4738f3ff0d38b6c08100312b2646c85f..196dce320f7b186c3c066f4787821ef70ee36d5c 100644 (file)
@@ -78,6 +78,9 @@ private:
 
        void TxTimerHandler(void);
        void ReconnectTimerHandler(void);
+
+       void ClearConfigTables(void);
+       void ClearConfigTable(const String& table);
 };
 
 }