From 15786baf3da59faca9676e51b97e7e424bc6ab2e Mon Sep 17 00:00:00 2001 From: Noah Hilverling Date: Wed, 10 Mar 2021 09:10:14 +0100 Subject: [PATCH] IDO: Use own transaction for programstatus --- lib/db_ido/dbconnection.cpp | 38 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/db_ido/dbconnection.cpp b/lib/db_ido/dbconnection.cpp index cd854bddf..1551a3c3c 100644 --- a/lib/db_ido/dbconnection.cpp +++ b/lib/db_ido/dbconnection.cpp @@ -150,12 +150,17 @@ void DbConnection::UpdateProgramStatus() std::vector queries; DbQuery query1; - query1.Table = "programstatus"; - query1.IdColumn = "programstatus_id"; - query1.Type = DbQueryInsert | DbQueryDelete; - query1.Category = DbCatProgramStatus; + query1.Type = DbQueryNewTransaction; + query1.Priority = PriorityImmediate; + queries.emplace_back(std::move(query1)); - query1.Fields = new Dictionary({ + DbQuery query2; + query2.Table = "programstatus"; + query2.IdColumn = "programstatus_id"; + query2.Type = DbQueryInsert | DbQueryDelete; + query2.Category = DbCatProgramStatus; + + query2.Fields = new Dictionary({ { "instance_id", 0 }, /* DbConnection class fills in real ID */ { "program_version", Application::GetAppVersion() }, { "status_update_time", DbValue::FromTimestamp(Utility::GetTime()) }, @@ -175,27 +180,26 @@ void DbConnection::UpdateProgramStatus() { "process_performance_data", (icingaApplication->GetEnablePerfdata() ? 1 : 0) } }); - query1.WhereCriteria = new Dictionary({ + query2.WhereCriteria = new Dictionary({ { "instance_id", 0 } /* DbConnection class fills in real ID */ }); - query1.Priority = PriorityImmediate; - queries.emplace_back(std::move(query1)); - - DbQuery query2; - query2.Type = DbQueryNewTransaction; queries.emplace_back(std::move(query2)); + DbQuery query3; + query3.Type = DbQueryNewTransaction; + queries.emplace_back(std::move(query3)); + DbObject::OnMultipleQueries(queries); - DbQuery query3; - query3.Table = "runtimevariables"; - query3.Type = DbQueryDelete; - query3.Category = DbCatProgramStatus; - query3.WhereCriteria = new Dictionary({ + DbQuery query4; + query4.Table = "runtimevariables"; + query4.Type = DbQueryDelete; + query4.Category = DbCatProgramStatus; + query4.WhereCriteria = new Dictionary({ { "instance_id", 0 } /* DbConnection class fills in real ID */ }); - DbObject::OnQuery(query3); + DbObject::OnQuery(query4); InsertRuntimeVariable("total_services", ConfigType::Get()->GetObjectCount()); InsertRuntimeVariable("total_scheduled_services", ConfigType::Get()->GetObjectCount());