From: Gunnar Beutner Date: Wed, 4 Feb 2015 14:25:10 +0000 (+0100) Subject: Implement support for updating the program_end_time column X-Git-Tag: v2.3.0~296 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a23ae94f90a661ab788d1fa51aa87f50542e232;p=icinga2 Implement support for updating the program_end_time column fixes #6923 --- diff --git a/lib/db_ido/dbconnection.cpp b/lib/db_ido/dbconnection.cpp index 844b32b15..4cb73339c 100644 --- a/lib/db_ido/dbconnection.cpp +++ b/lib/db_ido/dbconnection.cpp @@ -81,6 +81,21 @@ void DbConnection::Pause(void) << "Pausing IDO connection: " << GetName(); m_CleanUpTimer.reset(); + + DbQuery query1; + query1.Table = "programstatus"; + query1.IdColumn = "programstatus_id"; + query1.Type = DbQueryUpdate; + query1.Category = DbCatProgramStatus; + query1.WhereCriteria = new Dictionary(); + query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */ + + query1.Fields = new Dictionary(); + query1.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */ + query1.Fields->Set("program_end_time", DbValue::FromTimestamp(Utility::GetTime())); + ExecuteQuery(query1); + + NewTransaction(); } void DbConnection::InitializeDbTimer(void) diff --git a/lib/db_ido/dbconnection.hpp b/lib/db_ido/dbconnection.hpp index 5317ba0e4..4e67b8ea6 100644 --- a/lib/db_ido/dbconnection.hpp +++ b/lib/db_ido/dbconnection.hpp @@ -78,6 +78,7 @@ protected: virtual void CleanUpExecuteQuery(const String& table, const String& time_column, double max_age); virtual void FillIDCache(const DbType::Ptr& type) = 0; + virtual void NewTransaction(void) = 0; void UpdateAllObjects(void); diff --git a/lib/db_ido_mysql/idomysqlconnection.cpp b/lib/db_ido_mysql/idomysqlconnection.cpp index 107625d57..f94b6b65f 100644 --- a/lib/db_ido_mysql/idomysqlconnection.cpp +++ b/lib/db_ido_mysql/idomysqlconnection.cpp @@ -135,10 +135,15 @@ void IdoMysqlConnection::Disconnect(void) void IdoMysqlConnection::TxTimerHandler(void) { - m_QueryQueue.Enqueue(boost::bind(&IdoMysqlConnection::NewTransaction, this), true); + NewTransaction(); } void IdoMysqlConnection::NewTransaction(void) +{ + m_QueryQueue.Enqueue(boost::bind(&IdoMysqlConnection::InternalNewTransaction, this)); +} + +void IdoMysqlConnection::InternalNewTransaction(void) { boost::mutex::scoped_lock lock(m_ConnectionMutex); diff --git a/lib/db_ido_mysql/idomysqlconnection.hpp b/lib/db_ido_mysql/idomysqlconnection.hpp index 24fd1bb85..acbac6c51 100644 --- a/lib/db_ido_mysql/idomysqlconnection.hpp +++ b/lib/db_ido_mysql/idomysqlconnection.hpp @@ -55,6 +55,7 @@ protected: virtual void ExecuteQuery(const DbQuery& query); virtual void CleanUpExecuteQuery(const String& table, const String& time_key, double time_value); virtual void FillIDCache(const DbType::Ptr& type); + virtual void NewTransaction(void); private: DbReference m_InstanceID; @@ -80,7 +81,6 @@ private: void InternalActivateObject(const DbObject::Ptr& dbobj); void Disconnect(void); - void NewTransaction(void); void Reconnect(void); void AssertOnWorkQueue(void); @@ -90,6 +90,7 @@ private: void InternalExecuteQuery(const DbQuery& query, DbQueryType *typeOverride = NULL); void InternalCleanUpExecuteQuery(const String& table, const String& time_key, double time_value); + void InternalNewTransaction(void); virtual void ClearConfigTable(const String& table); diff --git a/lib/db_ido_pgsql/idopgsqlconnection.cpp b/lib/db_ido_pgsql/idopgsqlconnection.cpp index 005fd3c7d..1d74ebe32 100644 --- a/lib/db_ido_pgsql/idopgsqlconnection.cpp +++ b/lib/db_ido_pgsql/idopgsqlconnection.cpp @@ -136,10 +136,15 @@ void IdoPgsqlConnection::Disconnect(void) void IdoPgsqlConnection::TxTimerHandler(void) { - m_QueryQueue.Enqueue(boost::bind(&IdoPgsqlConnection::NewTransaction, this), true); + NewTransaction(); } void IdoPgsqlConnection::NewTransaction(void) +{ + m_QueryQueue.Enqueue(boost::bind(&IdoPgsqlConnection::NewTransaction, this), true); +} + +void IdoPgsqlConnection::InternalNewTransaction(void) { boost::mutex::scoped_lock lock(m_ConnectionMutex); diff --git a/lib/db_ido_pgsql/idopgsqlconnection.hpp b/lib/db_ido_pgsql/idopgsqlconnection.hpp index 486a8114e..3b9a79eea 100644 --- a/lib/db_ido_pgsql/idopgsqlconnection.hpp +++ b/lib/db_ido_pgsql/idopgsqlconnection.hpp @@ -55,6 +55,7 @@ protected: virtual void ExecuteQuery(const DbQuery& query); virtual void CleanUpExecuteQuery(const String& table, const String& time_key, double time_value); virtual void FillIDCache(const DbType::Ptr& type); + virtual void NewTransaction(void); private: DbReference m_InstanceID; @@ -78,7 +79,7 @@ private: void InternalActivateObject(const DbObject::Ptr& dbobj); void Disconnect(void); - void NewTransaction(void); + void InternalNewTransaction(void); void Reconnect(void); void AssertOnWorkQueue(void);