Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
68ebb42
test(graph): red freeze-boundary suite — post-compaction data loss (P…
TinDang97 Jul 6, 2026
f269b01
feat(graph): CSR v5 — persist properties, embeddings, edge weights ac…
TinDang97 Jul 6, 2026
facdf21
fix(graph): MergedNodeView — Cypher reads see frozen CSR tier; NodeKe…
TinDang97 Jul 6, 2026
a5d3fb4
fix(graph): cross-tier delta edges + NEIGHBORS/ADDEDGE/PROFILE/replay…
TinDang97 Jul 6, 2026
841205d
fix(graph): GRAPH.HYBRID/VSEARCH operate across both tiers — Phase 0 …
TinDang97 Jul 6, 2026
193c254
perf(graph): per-segment property indexes (lazy, freeze-time data); d…
TinDang97 Jul 6, 2026
a31a4a1
perf(graph): PhysicalOp::IndexScan — point queries via per-segment pr…
TinDang97 Jul 6, 2026
f0b525f
perf(graph): plan-cache auto-parameterization + LRU + single-parse di…
TinDang97 Jul 6, 2026
9254220
perf(graph): slot-indexed executor rows — kill per-row HashMap alloca…
TinDang97 Jul 6, 2026
be024fa
perf(graph): write-path + traversal allocation cleanups
TinDang97 Jul 6, 2026
8cabd4c
perf(graph): CSR row-space BFS fast path — parallel levels + directio…
TinDang97 Jul 6, 2026
062d60e
feat(graph): TraversalGuard in Cypher multi-hop ops + real hybrid Hns…
TinDang97 Jul 6, 2026
95ec77e
docs(changelog): graph engine overhaul entry under [Unreleased]
TinDang97 Jul 6, 2026
dc2c14a
fix(graph): prevent NodeKey aliasing across restart (P0)
TinDang97 Jul 7, 2026
3b7d502
perf(graph): raw-hash plan-cache fast path, cache SlotTable
TinDang97 Jul 7, 2026
5394c8f
perf(graph): count v5 property blobs + lazy indexes in CSR resident_b…
TinDang97 Jul 7, 2026
206eaf5
docs(changelog): record PR #231 pre-merge review fixes
TinDang97 Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ jobs:
- cypher_parse
- conf_parse
- csr_from_bytes
- graph_props_record
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@nightly
Expand Down Expand Up @@ -82,6 +83,7 @@ jobs:
- cypher_parse
- conf_parse
- csr_from_bytes
- graph_props_record
steps:
- uses: actions/checkout@v7
- uses: dtolnay/rust-toolchain@nightly
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ tmp/
/target-linux/
/target-linux-tokio/
/target-tokio/
/target-fast/
/target-check-tokio/
/target-check-monoio/
/target-check/
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
100ms either way; the fixed 15s was a documented host-load flake,
observed on the macOS CI runner).

### Changed — graph engine deep-review fixes + optimization waves (PR #TBD)

- **Freeze-boundary correctness (P0):** CSR v5 segments now persist node
properties, embeddings, and edge weights/properties across freeze;
Cypher reads see the frozen tier via `MergedNodeView` (NodeScan/eval/
IndexScan); cross-tier delta edges; GRAPH.NEIGHBORS existence +
direction fixes; GRAPH.HYBRID/VSEARCH operate across both tiers. New
red/green `graph_freeze_boundary` suite (11 tests) pins the lifecycle.
- **Point-query indexes (P1):** lazy per-segment property indexes (built
once at first use from freeze-time data) + `PhysicalOp::IndexScan` in
the planner/executor — `MATCH (n:L {p: v})` narrows instead of
label-scanning.
- **Query-path cost (P2):** plan-cache auto-parameterization (literal
variants share one cached plan; cache hits skip parse+compile
entirely) with LRU eviction; slot-indexed executor rows (no per-row
HashMap allocation, no per-insert String clone); write-path/WAL
allocation cleanups (ADDNODE double WAL-encode deleted, itoa/ryu
statement temporaries, FxHash for slotmap-keyed sets, Dijkstra
three-maps-to-one merge, allocation-free neighbor iteration in Cypher
Expand).
- **Traversal engine (P3):** CSR row-space BFS fast path on fully-frozen
graphs — dense-bitmap visited set, TRUE parallel frontier expansion
(thread::scope over Send+Sync CsrStorage), direction-optimizing
Beamer push/pull over the incoming index; `TraversalGuard` wall-clock
budget (30s default) now enforced per hop in Cypher variable-length
Expand and ShortestPath (`ExecErrorKind::Timeout`); GRAPH.HYBRID's
`HnswPreFilter` strategy is real — a lazy per-segment HNSW bridge
(`src/graph/hnsw_bridge.rs`, raw-f32 cosine over v5 embeddings, >= 4096
vectors) replaces the silent brute-force stub, with exact-scoring
fallback whenever the approximate beam under-fills.
- **Pre-merge review fixes:** (1) restart NodeKey aliasing (P0) — a fresh
post-recovery `MemGraph`'s deterministic SlotMap could mint keys
bit-identical to loaded CSR segments' `external_id`s, silently
shadowing frozen nodes; recovery now seeds the mutable tier via
`MemGraph::with_id_offset` (watermark past the largest persisted id)
and WAL replay dedup-skips AddNodes already resident in a loaded
segment (red/green `graph_restart_id_aliasing` suite). (2) Plan-cache
raw-hash fast path — exact-repeat queries hit the cache without the
`parameterize()` lexer pass, and the `SlotTable` is cached alongside
the plan instead of being rebuilt per execution; cache backing moved
to `FxHashMap`. (3) `CsrStorage::resident_bytes` now counts the v5
property blobs, lazily-built per-segment property indexes, and the
HNSW bridge (heap-owned; mmap-backed sections count 0 per the
`RawF16Store` precedent), keeping the elastic memory budget honest.

### Changed — consolidated dependency bumps (PR #TBD)

- Cargo: `ringbuf` 0.4.8 → 0.5.0 and `metrics-exporter-prometheus` 0.16.2 →
Expand Down
5 changes: 5 additions & 0 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,8 @@ doc = false

[workspace]
members = ["."]

[[bin]]
name = "graph_props_record"
path = "fuzz_targets/graph_props_record.rs"
doc = false
Loading
Loading