mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-25 14:44:32 +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);
|
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);
|
std::lock_guard lock(m_DependencyMutex);
|
||||||
m_Dependencies.insert(dep);
|
return {m_DependencyGroups.begin(), m_DependencyGroups.end()};
|
||||||
}
|
|
||||||
|
|
||||||
void Checkable::RemoveDependency(const Dependency::Ptr& dep)
|
|
||||||
{
|
|
||||||
std::unique_lock<std::mutex> lock(m_DependencyMutex);
|
|
||||||
m_Dependencies.erase(dep);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Dependency::Ptr> Checkable::GetDependencies() const
|
std::vector<Dependency::Ptr> Checkable::GetDependencies() const
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(m_DependencyMutex);
|
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)
|
void Checkable::AddReverseDependency(const Dependency::Ptr& dep)
|
||||||
|
@ -187,8 +187,7 @@ public:
|
|||||||
/* Dependencies */
|
/* Dependencies */
|
||||||
void AddDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
void AddDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
||||||
void RemoveDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
void RemoveDependencyGroup(const intrusive_ptr<DependencyGroup>& dependencyGroup);
|
||||||
void AddDependency(const intrusive_ptr<Dependency>& dep);
|
std::vector<intrusive_ptr<DependencyGroup>> GetDependencyGroups() const;
|
||||||
void RemoveDependency(const intrusive_ptr<Dependency>& dep);
|
|
||||||
std::vector<intrusive_ptr<Dependency> > GetDependencies() const;
|
std::vector<intrusive_ptr<Dependency> > GetDependencies() const;
|
||||||
|
|
||||||
void AddReverseDependency(const intrusive_ptr<Dependency>& dep);
|
void AddReverseDependency(const intrusive_ptr<Dependency>& dep);
|
||||||
@ -250,7 +249,6 @@ private:
|
|||||||
/* Dependencies */
|
/* Dependencies */
|
||||||
mutable std::mutex m_DependencyMutex;
|
mutable std::mutex m_DependencyMutex;
|
||||||
std::set<intrusive_ptr<DependencyGroup>> m_DependencyGroups;
|
std::set<intrusive_ptr<DependencyGroup>> m_DependencyGroups;
|
||||||
std::set<intrusive_ptr<Dependency> > m_Dependencies;
|
|
||||||
std::set<intrusive_ptr<Dependency> > m_ReverseDependencies;
|
std::set<intrusive_ptr<Dependency> > m_ReverseDependencies;
|
||||||
|
|
||||||
void GetAllChildrenInternal(std::set<Checkable::Ptr>& seenChildren, int level = 0) const;
|
void GetAllChildrenInternal(std::set<Checkable::Ptr>& seenChildren, int level = 0) const;
|
||||||
|
@ -251,7 +251,7 @@ void Dependency::OnAllConfigLoaded()
|
|||||||
// InitChildParentReferences() has to be called before.
|
// InitChildParentReferences() has to be called before.
|
||||||
VERIFY(m_Child && m_Parent);
|
VERIFY(m_Child && m_Parent);
|
||||||
|
|
||||||
m_Child->AddDependency(this);
|
DependencyGroup::Register(this);
|
||||||
m_Parent->AddReverseDependency(this);
|
m_Parent->AddReverseDependency(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,7 +259,7 @@ void Dependency::Stop(bool runtimeRemoved)
|
|||||||
{
|
{
|
||||||
ObjectImpl<Dependency>::Stop(runtimeRemoved);
|
ObjectImpl<Dependency>::Stop(runtimeRemoved);
|
||||||
|
|
||||||
GetChild()->RemoveDependency(this);
|
DependencyGroup::Unregister(this);
|
||||||
GetParent()->RemoveReverseDependency(this);
|
GetParent()->RemoveReverseDependency(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ BOOST_AUTO_TEST_CASE(multi_parent)
|
|||||||
dep1->SetStateFilter(StateFilterUp);
|
dep1->SetStateFilter(StateFilterUp);
|
||||||
|
|
||||||
// Reverse dependencies
|
// Reverse dependencies
|
||||||
childHost->AddDependency(dep1);
|
DependencyGroup::Register(dep1);
|
||||||
parentHost1->AddReverseDependency(dep1);
|
parentHost1->AddReverseDependency(dep1);
|
||||||
|
|
||||||
Dependency::Ptr dep2 = new Dependency();
|
Dependency::Ptr dep2 = new Dependency();
|
||||||
@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE(multi_parent)
|
|||||||
dep2->SetStateFilter(StateFilterUp);
|
dep2->SetStateFilter(StateFilterUp);
|
||||||
|
|
||||||
// Reverse dependencies
|
// Reverse dependencies
|
||||||
childHost->AddDependency(dep2);
|
DependencyGroup::Register(dep2);
|
||||||
parentHost2->AddReverseDependency(dep2);
|
parentHost2->AddReverseDependency(dep2);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user