Skip to content

v0.20.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 13:15

v0.20.0

Query engine:

  • Whole-graph label/reltype metadata (label/reltype counts, self-loop counts,
    first-label counts, the (srcLabel, reltype, tgtLabel) schema cube, undirected
    and labelled variants) is now answered directly from resident manifest
    metadata for unanchored MATCH shapes — zero block reads, versus a full
    unanchored scan before. Now also composes with ORDER BY / LIMIT.
  • Fixed a correctness bug where MATCH (a)-[r]->(a) (same variable on both
    ends, i.e. a self-loop constraint) was incorrectly treated as two bare
    endpoints by the metadata fast path; it now declines to the matcher.

Build (slater-build):

  • Fixed a real bug where the offline builder's emit.graph_summaries phase
    (whole-graph label/reltype/schema-cube summaries, computed at build time)
    re-decompressed a node's entire on-disk block on every single per-node
    lookup, with zero caching. At real dataset scale this made the phase
    effectively unbounded (confirmed via profiling: never finished after 27+
    minutes, on pace for 20-30+ hours). Fixed via a small, block-sequential
    cache shared with the query engine's existing block-cache design
    (extracted into a common module so both crates use the same well-tested
    cache) — the phase now completes in well under 5 minutes even on a
    91M-node / 1.5B-edge generation.
  • Added an opt-in --features profiling build (off by default, verified
    absent from the default dependency graph) for heap-profiling the builder
    during future investigations.

Known issues carried into this release (not yet fixed, flagged intentionally
rather than silently shipped):

  • The external resolve pass (business-key edge resolution) has a real
    memory-accounting gap: observed resident memory during this phase runs to
    several GB against a nominal much smaller configured working-memory budget,
    on large generations. Root-caused in part (a fixed-size internal buffer
    pool whose aggregate footprint isn't counted against the configured
    budget), but a further, size-scaling contributor is not yet isolated.
  • An attempted fix to the offline builder's clustering pass (bounding its
    internal sort's memory the same way other passes do) regressed both wall
    time and peak memory at large scale instead of improving them, and needs
    to be revisited or reverted.
    Neither affects correctness of the resulting on-disk generation — both are
    performance/resource-usage issues in the build path only.

Full Changelog: v0.19.0...v0.20.0