Jean-Gabriel Doyon activity https://gitlab.com/jgdoyon1 2026-03-18T19:57:12Z tag:gitlab.com,2026-03-18:5219282456 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T19:57:12Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (045d41c5) at 18 Mar 19:57

fix(gitlab-client): prevent panic on re-polling completed response ...

tag:gitlab.com,2026-03-18:5219239661 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T19:42:00Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (c4342a75) at 18 Mar 19:42

refactor(indexer): promote repository resolver logs to info level

tag:gitlab.com,2026-03-18:5219153209 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T19:13:01Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (3c38e038) at 18 Mar 19:13

refactor(indexer): extract MAX_FRAME_LENGTH constant in BlobStream

tag:gitlab.com,2026-03-18:5219127006 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T19:04:19Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (469cd025) at 18 Mar 19:04

fix(indexer): harden repository cache security and error handling

tag:gitlab.com,2026-03-18:5219048040 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:40:49Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (ef3240d6) at 18 Mar 18:40

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5219045229 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:39:52Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (cf8b5ed0) at 18 Mar 18:39

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5219030112 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:34:47Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (96e41825) at 18 Mar 18:34

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5219022149 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:32:24Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (ec3780fe) at 18 Mar 18:32

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5219011394 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:28:40Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (ff1f2684) at 18 Mar 18:28

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5219003005 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:25:41Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (23a95bf0) at 18 Mar 18:25

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5218969719 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:15:16Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (4f2061c2) at 18 Mar 18:15

refactor: stream changed paths and reorganize repository module

tag:gitlab.com,2026-03-18:5218926063 Jean-Gabriel Doyon commented on merge request !594 at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:02:57Z jgdoyon1 Jean-Gabriel Doyon

Good stuff! We just discussed this and it's already done, amazing!

tag:gitlab.com,2026-03-18:5218924451 Jean-Gabriel Doyon approved merge request !594: fix(query-engine): bound all unbounded query DSL fields at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T18:02:34Z jgdoyon1 Jean-Gabriel Doyon

Summary

Adds missing bounds to all unbounded arrays, objects, and string values in the query DSL. Prevents query complexity explosion from crafted payloads (e.g. 10,000 filters → 10,000 AND clauses).

What was unbounded

Field Attack Bound added
filters per node name='a' AND name='b' AND ... × 10k maxProperties: 10
filters per relationship Same on edge filters maxProperties: 5
columns list 1000 column names → huge SELECT maxItems: 50
aggregations 1000 aggregate expressions maxItems: 10
rel_types (path/neighbors) 1000 types → huge IN clause maxItems: 10
RelationshipType array 1000 types per relationship maxItems: 10
FilterValue strings 100MB string in a filter value maxLength: 1024
FilterValue arrays Nested arrays of values maxItems: 100
contains/starts_with/ends_with value 100MB LIKE pattern maxLength: 1024

Defense in depth

All bounds are enforced at two layers:

  1. JSON Schema (graph_query.schema.json) — rejects before parsing
  2. check_depth in validate.rs — rejects after parsing if schema was bypassed

Already bounded (no changes needed)

Field Bound
nodes maxItems: 5
relationships maxItems: 5
node_ids maxItems: 500
max_hops maximum: 3
max_depth maximum: 3
limit maximum: 1000
IN values maxItems: 100

Test results

  • 187/187 query-engine tests pass
  • Ontology validation passes
tag:gitlab.com,2026-03-18:5218905742 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:57:28Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (d9f7e0d8) at 18 Mar 17:57

refactor: consolidate response status checks and improve blob decod...

tag:gitlab.com,2026-03-18:5218897406 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:55:04Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (233f0c6a) at 18 Mar 17:55

refactor: consolidate response status checks and improve blob decod...

tag:gitlab.com,2026-03-18:5218797490 Jean-Gabriel Doyon pushed to project branch feat/repository-cache at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:26:50Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (2caa38dd) at 18 Mar 17:26

feat(indexer): stream blob response through LengthDelimitedCodec

tag:gitlab.com,2026-03-18:5218743159 Jean-Gabriel Doyon deleted project branch edge-lowcardinality-and-set-index at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:12:16Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (ff0d4b27) at 18 Mar 17:12

tag:gitlab.com,2026-03-18:5218742821 Jean-Gabriel Doyon pushed to project branch main at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:12:11Z jgdoyon1 Jean-Gabriel Doyon

Jean-Gabriel Doyon (c2390b8b) at 18 Mar 17:12

Merge branch 'edge-lowcardinality-and-set-index' into 'main'

... and 1 more commit

tag:gitlab.com,2026-03-18:5218742769 Jean-Gabriel Doyon accepted merge request !593: perf(schema): use LowCardinality and set index on gl_edge at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:12:10Z jgdoyon1 Jean-Gabriel Doyon

Summary

Per @ahegyi's feedback on !592:

  • Change source_kind, relationship_kind, target_kind from String to LowCardinality(String)
  • Change idx_relationship from bloom_filter to set(100)

Why

relationship_kind has 21 distinct values, source_kind/target_kind have ~24. LowCardinality dictionary-encodes these, reducing read bytes. set(100) stores the exact value set per block with zero false positives, vs bloom_filter's probabilistic approach — better fit for low cardinality columns.

Benchmark (113M edges, same aggregation query)

Config Time (median) Peak Memory Read Bytes
bloom_filter 40ms 207 MiB 258.80 MiB
set(100) 37ms 207 MiB 258.80 MiB
set(100) + LowCardinality 35ms 204 MiB 201.28 MiB

Both index types skip the same granules (775/1426). LowCardinality cuts read bytes by 22% (259 → 201 MiB) via dictionary encoding.

References

tag:gitlab.com,2026-03-18:5218727652 Jean-Gabriel Doyon commented on merge request !593 at GitLab.org / orbit / GitLab Knowledge Graph 2026-03-18T17:08:07Z jgdoyon1 Jean-Gabriel Doyon

TY for the quick turnaround!