From: Michael Friedrich Date: Wed, 11 May 2016 12:03:40 +0000 (+0200) Subject: Ensure that program status updates are immediately updated in DB IDO X-Git-Tag: v2.5.0~326 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=90f102abf33946a5b990ca9527d09578bd6ee88b;p=icinga2 Ensure that program status updates are immediately updated in DB IDO fixes #11767 --- diff --git a/lib/db_ido/dbconnection.cpp b/lib/db_ido/dbconnection.cpp index 694b9e37f..c7995c8f2 100644 --- a/lib/db_ido/dbconnection.cpp +++ b/lib/db_ido/dbconnection.cpp @@ -146,7 +146,7 @@ void DbConnection::InitializeDbTimer(void) { m_ProgramStatusTimer = new Timer(); m_ProgramStatusTimer->SetInterval(10); - m_ProgramStatusTimer->OnTimerExpired.connect(boost::bind(&DbConnection::ProgramStatusHandler)); + m_ProgramStatusTimer->OnTimerExpired.connect(boost::bind(&DbConnection::UpdateProgramStatus)); m_ProgramStatusTimer->Start(); } @@ -163,7 +163,7 @@ void DbConnection::InsertRuntimeVariable(const String& key, const Value& value) DbObject::OnQuery(query); } -void DbConnection::ProgramStatusHandler(void) +void DbConnection::UpdateProgramStatus(void) { Log(LogNotice, "DbConnection") << "Updating programstatus table."; @@ -206,15 +206,19 @@ void DbConnection::ProgramStatusHandler(void) query2.Priority = PriorityHigh; queries.push_back(query2); + DbQuery query3; + query3.Type = DbQueryNewTransaction; + queries.push_back(query3); + DbObject::OnMultipleQueries(queries); - DbQuery query3; - query3.Table = "runtimevariables"; - query3.Type = DbQueryDelete; - query3.Category = DbCatProgramStatus; - query3.WhereCriteria = new Dictionary(); - query3.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ - DbObject::OnQuery(query3); + DbQuery query4; + query4.Table = "runtimevariables"; + query4.Type = DbQueryDelete; + query4.Category = DbCatProgramStatus; + query4.WhereCriteria = new Dictionary(); + query4.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ + DbObject::OnQuery(query4); InsertRuntimeVariable("total_services", std::distance(ConfigType::GetObjectsByType().first, ConfigType::GetObjectsByType().second)); InsertRuntimeVariable("total_scheduled_services", std::distance(ConfigType::GetObjectsByType().first, ConfigType::GetObjectsByType().second)); diff --git a/lib/db_ido/dbconnection.hpp b/lib/db_ido/dbconnection.hpp index 6f81178f7..94b1af485 100644 --- a/lib/db_ido/dbconnection.hpp +++ b/lib/db_ido/dbconnection.hpp @@ -95,6 +95,8 @@ protected: void IncreaseQueryCount(void); + static void UpdateProgramStatus(void); + private: std::map m_ObjectIDs; std::map, DbReference> m_InsertIDs; @@ -114,7 +116,6 @@ private: void StatsLoggerTimerHandler(void); static void InsertRuntimeVariable(const String& key, const Value& value); - static void ProgramStatusHandler(void); mutable boost::mutex m_StatsMutex; RingBuffer m_QueryStats; diff --git a/lib/db_ido/dbquery.hpp b/lib/db_ido/dbquery.hpp index 1dd2d4318..3161d1c1b 100644 --- a/lib/db_ido/dbquery.hpp +++ b/lib/db_ido/dbquery.hpp @@ -33,7 +33,8 @@ enum DbQueryType { DbQueryInsert = 1, DbQueryUpdate = 2, - DbQueryDelete = 4 + DbQueryDelete = 4, + DbQueryNewTransaction = 8 }; enum DbQueryCategory diff --git a/lib/db_ido_mysql/idomysqlconnection.cpp b/lib/db_ido_mysql/idomysqlconnection.cpp index 1d2317d34..20af6a4f6 100644 --- a/lib/db_ido_mysql/idomysqlconnection.cpp +++ b/lib/db_ido_mysql/idomysqlconnection.cpp @@ -356,6 +356,9 @@ void IdoMysqlConnection::Reconnect(void) /* set session time zone to utc */ Query("SET SESSION TIME_ZONE='+00:00'"); + /* update programstatus table */ + UpdateProgramStatus(); + /* record connection */ Query("INSERT INTO " + GetTablePrefix() + "conninfo " + "(instance_id, connect_time, last_checkin_time, agent_name, agent_version, connect_type, data_start_time) VALUES (" @@ -837,7 +840,7 @@ void IdoMysqlConnection::InternalExecuteMultipleQueries(const std::vectorGetObject()->GetExtension("agent_check").ToBool()) diff --git a/lib/db_ido_pgsql/idopgsqlconnection.cpp b/lib/db_ido_pgsql/idopgsqlconnection.cpp index a55f5fa64..93f72f9d1 100644 --- a/lib/db_ido_pgsql/idopgsqlconnection.cpp +++ b/lib/db_ido_pgsql/idopgsqlconnection.cpp @@ -324,6 +324,9 @@ void IdoPgsqlConnection::Reconnect(void) Log(LogInformation, "IdoPgsqlConnection") << "pgSQL IDO instance id: " << static_cast(m_InstanceID) << " (schema version: '" + version + "')"; + /* update programstatus table */ + UpdateProgramStatus(); + /* record connection */ Query("INSERT INTO " + GetTablePrefix() + "conninfo " + "(instance_id, connect_time, last_checkin_time, agent_name, agent_version, connect_type, data_start_time) VALUES (" @@ -697,7 +700,7 @@ void IdoPgsqlConnection::InternalExecuteMultipleQueries(const std::vectorGetObject()->GetExtension("agent_check").ToBool())