Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Electric on-demand skips updates to unknown rows that enter a served ordered range

Aperta
#2,138 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
data

Direzione di ricerca

Start at packages/electric-db-collection/src/electric.ts near line 2382, where updates for rows the Collection does not know are skipped unless the shape uses replica: 'full'. Read docs/collections/electric-collection.md around line 414 for the documented 'unknown partial rows are ignored' behavior. Done means a witness test with the mocked ShapeStream shows the window moving from [10, 4] to [10, 7], and the server's actual messages for this row are confirmed. The fix approach is still an open design choice among the options in the issue.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

An on-demand Electric collection with the default replica mode can show a wrong ordered window. A row that the Collection did not load can move into a served ordered range, and the Collection never receives it.

Electric skips an update for a row that the Collection does not know, unless the shape uses replica: 'full' (packages/electric-db-collection/src/electric.ts, near line 2382). A default-replica update contains only the changed columns, so the client cannot make the row from it. The documentation states this behavior: "unknown partial rows are ignored" (docs/collections/electric-collection.md:414).

This conflicts with the LoadSubset rule from #2136: a provider keeps each served ordered range whole. After a load serves an ordered, limited page, every row that later sorts inside that range must arrive. Electric's move-in and tag messages apply to rows that Electric already knows. They do not cover a row that newly sorts into a limited ordered range.

Reproduction

On-demand mode, default replica, live query orderBy(rank desc).limit(2).

  1. Rows with rank 10, 4, 1, 0. The window is [10, 4].
  2. The shape stream sends an update for the row with rank 0, which the Collection did not load. Its rank changes to 7.
  3. Expected window: [10, 7]. Actual window: [10, 4].

With replica: 'full', the row arrives and the window is [10, 7].

A witness test uses the package's mocked ShapeStream. It will go into the fix PR. It does not prove which messages a real Electric server sends for this row. The fix PR must confirm that against the server or its documentation.

Options

  • When an update arrives for an unknown row, fetch the full row, or reload the served subsets that the row can enter.
  • Invalidate the limited ordered subsets when such an update arrives, so that the DB loader requests them again.
  • Accept the gap as a limit, and document that ordered on-demand windows need replica: 'full'.

Related: #2136 (the same rule for query-db).

This issue was written by Isaac.

Lingua principale
TypeScript
Stelle
3.9k
Fork
272
Merge medio
1g 1h
PR unite (30g)
235

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di TanStack/db

Tutte le issue di TanStack/db

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.