Electric on-demand skips updates to unknown rows that enter a served ordered range
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).
- Rows with rank 10, 4, 1, 0. The window is
[10, 4]. - The shape stream sends an update for the row with rank 0, which the Collection did not load. Its rank changes to 7.
- 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
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di TanStack/db
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 8/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 58/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 5/100
TanStack/db#2139 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
Issue simili
-
e2e-failure ready-to-code
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
redhat-developer/rhdh-plugin-export-overlays#4391 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
Luligu/matterbridge#655 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
software-mansion/argent#1457 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
schmayterling/hibi#245 ·
I maintainer di solito rispondono entro 1 giorno
-
ai-driven-qa bug claude Minor
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
linagora/twake-contacts-frontend#241 ·
I maintainer di solito rispondono entro 1 giorno