mirror of https://github.com/Icinga/icinga2.git
Merge pull request #10065 from Icinga/heavy-update-missing-table-relations
Update `object#config_hash` after all relations queries
This commit is contained in:
commit
cc3965c3ce
|
@ -119,6 +119,14 @@ void DbObject::SendConfigUpdateHeavy(const Dictionary::Ptr& configFields)
|
|||
|
||||
ASSERT(configFields->Contains("config_hash"));
|
||||
|
||||
Value configHash = configFields->Get("config_hash");
|
||||
// Since all the child tables are relying on the inserted parent ID, we first need to insert/update the
|
||||
// configuration fields of the current object without the actual config_hash value. Having the config hash
|
||||
// set only after all relation queries eliminates some rare race conditions where e.g. host group members
|
||||
// are not written to the database because Icinga 2 / the DBMS was unexpectedly stopped/reloaded shortly
|
||||
// after the config_hash column was updated.
|
||||
configFields->Set("config_hash", Empty);
|
||||
|
||||
ConfigObject::Ptr object = GetObject();
|
||||
|
||||
DbQuery query;
|
||||
|
@ -138,7 +146,22 @@ void DbObject::SendConfigUpdateHeavy(const Dictionary::Ptr& configFields)
|
|||
|
||||
m_LastConfigUpdate = Utility::GetTime();
|
||||
|
||||
// Trigger config heavy udpates of the child classes.
|
||||
OnConfigUpdateHeavy();
|
||||
|
||||
// Now update the config hash attribute of the current object.
|
||||
DbQuery configHashQuery;
|
||||
configHashQuery.Table = GetType()->GetTable() + "s";
|
||||
configHashQuery.Type = DbQueryUpdate;
|
||||
configHashQuery.Category = DbCatConfig;
|
||||
configHashQuery.Fields = new Dictionary({{"config_hash", configHash}});
|
||||
configHashQuery.Object = this;
|
||||
configHashQuery.ConfigUpdate = true;
|
||||
configHashQuery.WhereCriteria = new Dictionary({{GetType()->GetIDColumn(), object}});
|
||||
OnQuery(configHashQuery);
|
||||
|
||||
// Lastly, update some common configs that do not affect the config_hash column.
|
||||
OnConfigUpdateLight();
|
||||
}
|
||||
|
||||
void DbObject::SendConfigUpdateLight()
|
||||
|
|
|
@ -330,8 +330,6 @@ void HostDbObject::OnConfigUpdateHeavy()
|
|||
}
|
||||
|
||||
DbObject::OnMultipleQueries(queries);
|
||||
|
||||
DoCommonConfigUpdate();
|
||||
}
|
||||
|
||||
void HostDbObject::OnConfigUpdateLight()
|
||||
|
|
|
@ -282,8 +282,6 @@ void ServiceDbObject::OnConfigUpdateHeavy()
|
|||
}
|
||||
|
||||
DbObject::OnMultipleQueries(queries);
|
||||
|
||||
DoCommonConfigUpdate();
|
||||
}
|
||||
|
||||
void ServiceDbObject::OnConfigUpdateLight()
|
||||
|
|
Loading…
Reference in New Issue