#6946 uncached-var dedupe: every uncached var is re-sent once right after hydrate, dict key order defeats the dedupe, and the _UNKEYABLE_VALUE branch is unreachable
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
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- python
- Ambito
- backend-api-design, testing-qa
Direzione di ricerca
Start with State.hydrate, _get_resolved_delta, and _delta_value_key, then reproduce the behavior using event_loop/scripts/wsdrive.py and the /dedupe page, including Unkeyable.u_obj. Compare the hydrate and subsequent frames, dict ordering, and null-serializing values; done means the three reported cases match the expected behavior and the existing #6946 scenarios remain valid.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
Three polish items in the #6946 delta dedupe for @rx.var(cache=False), found while verifying it end to end (the feature itself works: ~42% fewer inbound websocket bytes on the campaign's click sequence, correct per client token, survives reload and redis multi-worker).
- Every uncached var is re-sent once right after hydrate.
State.hydrateemitsself.dict(), which does not go through the delta recording, so the very next event (on_load_internal, fired immediately) re-sends all of them: a 3 318 B hydrate frame followed by a 447 B frame containing only the uncached vars. One redundant frame per page load; on reconnect with a warm memo it does not appear. - Dict key order defeats the dedupe.
_delta_value_keydigests the JSON text, so{"a": 1, "b": 2}and{"b": 2, "a": 1}have different keys and such a var is re-sent on every event, while the changelog says the value is "only included in the delta when it actually changed". Either canonicalize (sort_keys=True) or document it. - The
_UNKEYABLE_VALUEbranch is dead, and unserializable values dedupe against each other._delta_value_keytreats ajson_dumpsexception as "always send", but reflex'sjson_dumpsnever raises for unknown types; it returnsnullforcomplex, a bareobject()or an arbitrary class instance. Two different unserializable values therefore key identically: acomplex(n, 1)var is never re-sent across three bumps.
To Reproduce
The campaign's elapp app and websocket-frame driver: event_loop/ (scripts/wsdrive.py, the /dedupe page; the Unkeyable.u_obj var for item 3), NOTES.md sections "#6946" and "anomalies" 1 to 3.
Expected behavior
Hydrate records what it sends (or on_load_internal skips values the hydrate frame carried); dict values are keyed canonically or the changelog states the limitation; values that serialize to null are either always sent or keyed by identity.
Specifics
- Reflex 0.9.12a1 and 0.9.12a2 (#6946 is new in 0.9.12, so no baseline); after #7216 the recording moved to
_get_resolved_delta, which does not change any of the three - Python 3.11.15, Linux
Additional context
0.9.12a1 pre-release QA, event_loop cluster, LOW. Full write-up: FINDINGS.md.
- Lingua principale
- Python
- Stelle
- 28.9k
- Fork
- 1.8k
- Merge medio
- 2g 4h
- PR unite (30g)
- 179
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- 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 reflex-dev/reflex
-
`reflex cloud project list` table renders `tier` as a raw JSON blobForse già presa @harsh21234i l’ha presa 6 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
reflex-dev/reflex#7300 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
reflex cloud apps logs prints JSON log records with `Info: ` prefixForse già presa @harsh21234i l’ha presa 2 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
reflex-dev/reflex#7293 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
reflex-dev/reflex#7261 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
reflex-dev/reflex#7260 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
CDN fallback URL for an unbundled sub-path @rx.dynamic import is malformed (".../+esm/dist/esm/icons/bug.mjs")Forse già presa @JohannesGezachew l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
reflex-dev/reflex#7249 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di reflex-dev/reflex
Issue simili
-
jobs restart --verify: hotlane restart timeout (10s) shorter than its shutdown (~30s) → false exit 1Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
EtanHey/brainlayer#1072 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
_apply_doc_content: a cancel during the shielded image gather still sends the content batchUpdateApertaenhancement
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 80/100
khuisman/mcp-gee-sweet#904 ·
I maintainer di solito rispondono entro 1 giorno
-
Lychee link check failedAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 70/100
-
CORE-HIST-005/006 multi-turn history tests send three different messages with the same messageIdAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
a2aproject/a2a-tck#248 ·