[Group Hierarchy] Implement new hierarchy lookup queries
Implement a new module called Namespace::Traversal::Denormalized that implements the common descendant lookup queries on top of the recently introduced database model: Namespaces::Descendants.
Methods to implement:
-
self_and_descendant_ids(override) -
all_project_ids(override)
The methods should be controlled with a feature flag (group_hierarchy_optimization) where the actor is the current namespace record, similar to the Namespace::Traversal::Linear module.
If the feature flag is enabled, we should build a specialized query that does an OR lookup:
- if cache is not outdated, read the cached date
- if cache is outdated, fallback to the original implementation
Here you can see an example implementation: !134499 (diffs)
Testing:
Each method needs at least four test cases:
- When optimization is off for the current group.
- When the current group has no
namespace_descendantsrecord. - When the current group has outdated
namespace_descendantsrecord. - When the current group has up to date
namespace_descendantsrecord.- To properly test this, you need to create the
namespace_descendantrows in a way that the group and project id arrays are correctly filled.
- To properly test this, you need to create the
Edited by Adam Hegyi