Checkable: Store dependencies grouped by their redundancy group

This commit is contained in:
Yonas Habteab 2024-12-04 10:55:16 +01:00
parent 1820955993
commit ff0dabe287
4 changed files with 14 additions and 17 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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);
}

View File

@ -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);