Electric on-demand skips updates to unknown rows that enter a served ordered range
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 25/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- typescript
- Domaine
- data
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- TypeScript
- Étoiles
- 3.9k
- Forks
- 272
- Merge moyen
- 22 h 54 min
- PR mergées (30 j)
- 236
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de TanStack/db
-
Difficulté 4/5 3-5 jours Accessibilité débutants 22/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 12/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 8/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 5/100
TanStack/db#2186 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de TanStack/db
Issues similaires
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 70/100
lingdojo/kana-dojo#32590 · 1 commentaire · 5 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
bug p2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
bastani-inc/atomic#3703 ·
Les mainteneurs répondent en général sous 1 jour
-
backend bug difficulty: medium priority: medium reliability
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
trustflow-protocol/trustflow-backend#730 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
firecrawl/firecrawl-mcp-server#548 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour