mirror of
https://github.com/Icinga/icinga2.git
synced 2025-04-08 17:05:25 +02:00
Checkable: Store dependencies grouped by their redundancy group
This commit is contained in:
parent
1820955993
commit
ff0dabe287
@ -27,22 +27,21 @@ void Checkable::RemoveDependencyGroup(const DependencyGroup::Ptr& dependencyGrou
|
||||
m_DependencyGroups.erase(dependencyGroup);
|
||||
}
|
||||
|
||||
void Checkable::AddDependency(const Dependency::Ptr& dep)
|
||||
std::vector<DependencyGroup::Ptr> Checkable::GetDependencyGroups() const
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(m_DependencyMutex);
|
||||
m_Dependencies.insert(dep);
|
||||
}
|
||||
|
||||
void Checkable::RemoveDependency(const Dependency::Ptr& dep)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(m_DependencyMutex);
|
||||
m_Dependencies.erase(dep);
|
||||
std::lock_guard lock(m_DependencyMutex);
|
||||
return {m_DependencyGroups.begin(), m_DependencyGroups.end()};
|
||||
}
|
||||
|
||||
std::vector<Dependency::Ptr> Checkable::GetDependencies() const
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(m_DependencyMutex);
|
||||
return std::vector<Dependency::Ptr>(m_Dependencies.begin(), m_Dependencies.end());
|
||||
std::vector<Dependency::Ptr> dependencies;
|
||||
for (const auto& dependencyGroup : m_DependencyGroups) {
|
||||
auto tmpDependencies(dependencyGroup->GetDependenciesForChild(this));
|
||||
dependencies.insert(dependencies.end(), tmpDependencies.begin(), tmpDependencies.end());
|
||||
}
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
void Checkable::AddReverseDependency(const Dependency::Ptr& dep)
|
||||
|
@ -187,8 +187,7 @@ public:
|
||||
/* Dependencies */
|
||||
void AddDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
||||
void RemoveDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
||||
void AddDependency(const intrusive_ptr<Dependency>& dep);
|
||||
void RemoveDependency(const intrusive_ptr<Dependency>& dep);
|
||||
std::vector<intrusive_ptr<DependencyGroup>> GetDependencyGroups() const;
|
||||
std::vector<intrusive_ptr<Dependency> > GetDependencies() const;
|
||||
|
||||
void AddReverseDependency(const intrusive_ptr<Dependency>& dep);
|
||||
@ -250,7 +249,6 @@ private:
|
||||
/* Dependencies */
|
||||
mutable std::mutex m_DependencyMutex;
|
||||
std::set<intrusive_ptr<DependencyGroup>> m_DependencyGroups;
|
||||
std::set<intrusive_ptr<Dependency> > m_Dependencies;
|
||||
std::set<intrusive_ptr<Dependency> > m_ReverseDependencies;
|
||||
|
||||
void GetAllChildrenInternal(std::set<Checkable::Ptr>& seenChildren, int level = 0) const;
|
||||
|
@ -251,7 +251,7 @@ void Dependency::OnAllConfigLoaded()
|
||||
// InitChildParentReferences() has to be called before.
|
||||
VERIFY(m_Child && m_Parent);
|
||||
|
||||
m_Child->AddDependency(this);
|
||||
DependencyGroup::Register(this);
|
||||
m_Parent->AddReverseDependency(this);
|
||||
}
|
||||
|
||||
@ -259,7 +259,7 @@ void Dependency::Stop(bool runtimeRemoved)
|
||||
{
|
||||
ObjectImpl<Dependency>::Stop(runtimeRemoved);
|
||||
|
||||
GetChild()->RemoveDependency(this);
|
||||
DependencyGroup::Unregister(this);
|
||||
GetParent()->RemoveReverseDependency(this);
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,7 @@ BOOST_AUTO_TEST_CASE(multi_parent)
|
||||
dep1->SetStateFilter(StateFilterUp);
|
||||
|
||||
// Reverse dependencies
|
||||
childHost->AddDependency(dep1);
|
||||
DependencyGroup::Register(dep1);
|
||||
parentHost1->AddReverseDependency(dep1);
|
||||
|
||||
Dependency::Ptr dep2 = new Dependency();
|
||||
@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE(multi_parent)
|
||||
dep2->SetStateFilter(StateFilterUp);
|
||||
|
||||
// Reverse dependencies
|
||||
childHost->AddDependency(dep2);
|
||||
DependencyGroup::Register(dep2);
|
||||
parentHost2->AddReverseDependency(dep2);
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user