apache / apache/hugegraph

[Improve] Restore selective property pushdown with complete label index coverage

Open
#3,201 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
3.2k
Forks
636
Avg merge
3d 11h
Merged PRs (30d)
14

Description

### Background

Follow-up to [PR #2994 review](https://github.com/apache/hugegraph/pull/2994#discussion_r3972183225), inspected at `2d53a556c001a13f5efafffc70cc60bee8b15496`.

`TraversalUtil.hasUnsafeLabelInTraversal()` conservatively prevents property-index pushdown when a later unsafe label predicate could require candidates from labels without equivalent property-index coverage. It examines child/ancestor contexts and remains conservative across unproven element changes and extension steps. Local filtering preserves complete results, but can turn a selective property lookup into a large candidate scan.

The existing FIXME identifies the intended optimization: restore selective property pushdown only when every candidate schema label is proven to have compatible index coverage. Safe positive label-index lookup, already restored in PR #2994, is separate from this property-index problem.

### Scope and acceptance

- [ ] Define a sound way to identify the candidate labels for the element actually being filtered, respecting child/ancestor traversal context and element-identity changes.
- [ ] Require complete, predicate-compatible index coverage for every candidate label before extracting a property predicate. Keep local filtering when the proof is unavailable or incomplete.
- [ ] Cover missing/disabled indexes, composite indexes, range/SEARCH semantics, and schema/index changes between optimization and execution; document the supported lifecycle boundary.
- [ ] Verify result-set equivalence with conservative local filtering for negative labels, mixed connectives, barriers, nested/repeat/select contexts, explicit IDs, and adjacency queries.
- [ ] Preserve range/offset ordering, count, side effects, and paging through empty filtered pages. Do not bypass filters or silently weaken resource limits.
- [ ] Add plan assertions showing extraction only in proven-safe cases and retention of the local fallback in counterexamples.
- [ ] Measure candidate counts and latency on identical data/configurations for both fully covered and partially covered label sets, including RocksDB and HStore. Report measured gains rather than assuming them.

Keep PR #2994's correctness-first fallback until this proof and its regression tests are ready. This issue does not include the per-element CONTAINS conversion cache tracked in #3196 or coverage-report collection changes.

Contributor guide

Open the contributing guide

Research direction

Start with TraversalUtil.hasUnsafeLabelInTraversal() and the correctness-first fallback restored in PR #2994. Trace the child/ancestor and element-identity cases, then add plan and result-equivalence regression tests for the listed counterexamples. Done means safe extraction only with complete compatible coverage, preserved fallback behavior, and measured candidate-count and latency comparisons on RocksDB and HStore.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
databases, performance
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.