mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-24 06:05:01 +02:00
Fix: Changing a group's attributes causes duplicate rows in the icinga_*group_members table
fixes #10422
This commit is contained in:
parent
27e15a9654
commit
13375d74fc
@ -55,15 +55,24 @@ void HostGroupDbObject::OnConfigUpdate(void)
|
|||||||
{
|
{
|
||||||
HostGroup::Ptr group = static_pointer_cast<HostGroup>(GetObject());
|
HostGroup::Ptr group = static_pointer_cast<HostGroup>(GetObject());
|
||||||
|
|
||||||
|
DbQuery query1;
|
||||||
|
query1.Table = DbType::GetByName("HostGroup")->GetTable() + "_members";
|
||||||
|
query1.Type = DbQueryDelete;
|
||||||
|
query1.Category = DbCatConfig;
|
||||||
|
query1.WhereCriteria = new Dictionary();
|
||||||
|
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
||||||
|
query1.WhereCriteria->Set("hostgroup_id", DbValue::FromObjectInsertID(group));
|
||||||
|
OnQuery(query1);
|
||||||
|
|
||||||
BOOST_FOREACH(const Host::Ptr& host, group->GetMembers()) {
|
BOOST_FOREACH(const Host::Ptr& host, group->GetMembers()) {
|
||||||
DbQuery query1;
|
DbQuery query2;
|
||||||
query1.Table = DbType::GetByName("HostGroup")->GetTable() + "_members";
|
query2.Table = DbType::GetByName("HostGroup")->GetTable() + "_members";
|
||||||
query1.Type = DbQueryInsert;
|
query2.Type = DbQueryInsert;
|
||||||
query1.Category = DbCatConfig;
|
query2.Category = DbCatConfig;
|
||||||
query1.Fields = new Dictionary();
|
query2.Fields = new Dictionary();
|
||||||
query1.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
||||||
query1.Fields->Set("hostgroup_id", DbValue::FromObjectInsertID(group));
|
query2.Fields->Set("hostgroup_id", DbValue::FromObjectInsertID(group));
|
||||||
query1.Fields->Set("host_object_id", host);
|
query2.Fields->Set("host_object_id", host);
|
||||||
OnQuery(query1);
|
OnQuery(query2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,15 +54,24 @@ void ServiceGroupDbObject::OnConfigUpdate(void)
|
|||||||
{
|
{
|
||||||
ServiceGroup::Ptr group = static_pointer_cast<ServiceGroup>(GetObject());
|
ServiceGroup::Ptr group = static_pointer_cast<ServiceGroup>(GetObject());
|
||||||
|
|
||||||
|
DbQuery query1;
|
||||||
|
query1.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
|
||||||
|
query1.Type = DbQueryDelete;
|
||||||
|
query1.Category = DbCatConfig;
|
||||||
|
query1.WhereCriteria = new Dictionary();
|
||||||
|
query1.WhereCriteria->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
||||||
|
query1.WhereCriteria->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
|
||||||
|
OnQuery(query1);
|
||||||
|
|
||||||
BOOST_FOREACH(const Service::Ptr& service, group->GetMembers()) {
|
BOOST_FOREACH(const Service::Ptr& service, group->GetMembers()) {
|
||||||
DbQuery query1;
|
DbQuery query2;
|
||||||
query1.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
|
query2.Table = DbType::GetByName("ServiceGroup")->GetTable() + "_members";
|
||||||
query1.Type = DbQueryInsert;
|
query2.Type = DbQueryInsert;
|
||||||
query1.Category = DbCatConfig;
|
query2.Category = DbCatConfig;
|
||||||
query1.Fields = new Dictionary();
|
query2.Fields = new Dictionary();
|
||||||
query1.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
query2.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
|
||||||
query1.Fields->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
|
query2.Fields->Set("servicegroup_id", DbValue::FromObjectInsertID(group));
|
||||||
query1.Fields->Set("service_object_id", service);
|
query2.Fields->Set("service_object_id", service);
|
||||||
OnQuery(query1);
|
OnQuery(query2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user