Skip to content

fix(api): stop forcing vchordrq.probes on listless vchord indexes#2076

Merged
nicoloboschi merged 1 commit into
mainfrom
fix/vchord-listless-probes
Jun 9, 2026
Merged

fix(api): stop forcing vchordrq.probes on listless vchord indexes#2076
nicoloboschi merged 1 commit into
mainfrom
fix/vchord-listless-probes

Conversation

@nicoloboschi

Copy link
Copy Markdown
Collaborator

Summary

Stop applying the blanket session-level vchordrq.probes GUC for the vchord vector backend. The dispatcher now returns no ANN-tuning statements for vchord; pgvector hnsw.ef_search tuning is unchanged.

The bug (vchord deployments only)

Hindsight set a session-level vchordrq.probes override (10 on the retain link path via SET LOCAL, 30 on pooled connections via SET). But VectorChord requires the probes value to match each index's build.internal.lists hierarchy. Hindsight's built-in vchordrq index clause does not set lists, so the index is listless and expects 0 probes — supplying any value makes the query fail with:

need 0 probes, but 1 probes provided

Concretely, on a vchord backend this rejects the worker's retain completion after LLM extraction has already succeeded (output_tokens: 1104, time: 230s in the worker log), so the retain op retries forever, the worker queue fills with stuck retain ops, and consolidation is blocked. A hard, full-stop break for vchord users.

This was introduced by #1668 (which correctly moved vchord to vector_cosine_ops but also added the blanket probe GUCs). Reported in #1667.

Fix

Remove the vchord entries from _ANN_TUNING_LOW_LATENCY / _ANN_TUNING_HIGH_RECALL, so ann_search_tuning_settings("vchord", …) returns () and no session-level probe override is applied. Deployments that do create partitioned vchordrq indexes should attach probes via VectorChord 1.1 index storage fallback parameters instead — the safe place for index-shaped tuning.

Verification

  • uv run pytest tests/test_vector_index.py tests/test_link_utils.py::TestComputeSemanticLinksAnnPgBouncerSafety -q — 23 passed
  • Tests assert pgvector still uses SET LOCAL hnsw.ef_search and that vchord emits no vchordrq.probes.

Scope

This is the isolated regression fix split out of #1954; the structured-output / strict_schema hardening in that PR is a separate concern and is intentionally not included here.

… indexes

Hindsight set a session-level vchordrq.probes override (10/30) for the
vchord backend, but VectorChord requires the probes value to match each
index's build.internal.lists hierarchy. Hindsight's built-in vchordrq
index clause does not set lists, so it is listless and expects 0 probes;
the session GUC supplies 1, and every query on that pooled connection
fails with "need 0 probes, but 1 probes provided".

On vchord deployments this rejects retain completions after extraction
succeeds, so the worker retries forever and the queue fills with stuck
retain ops that block consolidation.

Drop the vchord entries from the ANN tuning dispatcher so no session
probe override is applied; deployments that partition vchordrq indexes
should attach probes via index storage fallback parameters (VectorChord
1.1) instead. pgvector hnsw.ef_search tuning is unchanged.

Refs #1667.
@nicoloboschi nicoloboschi merged commit 109e1bd into main Jun 9, 2026
172 of 176 checks passed
@nicoloboschi nicoloboschi deleted the fix/vchord-listless-probes branch June 9, 2026 11:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant