docs: does insert/delete invalidate iterators?
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 68/100
- Tipo di issue
- Documentazione
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust, typescript
- Ambito
- databases, documentation
Direzione di ricerca
Inizia dai percorsi di scansione del datastore e di buffering degli iteratori indicati nell’issue: crates/core/src/host/instance_env.rs e crates/core/src/host/v8/syscall/common.rs. Verifica come il comportamento documentato dell’iteratore si rapporta a questi percorsi, quindi aggiorna la documentazione pertinente dell’iteratore per specificare quale delle opzioni A–D si applica. Il lavoro è completato quando la documentazione chiarisce se gli inserimenti o le eliminazioni influiscono sugli iteratori attivi e, se applicabile, se le righe sono snapshot.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
The question
The docs don't specify whether iterators are invalidated by insert and delete, leaving this code with questionable correctness:
for (const queuer of ctx.db.game_queue.public_game.filter(true)) {
if (logic(queuer)) {
ctx.db.game_queue.id.delete(queuer.id);
// Should we break here and filter again or is it safe to continue?
}
}
// Will this loop forever, or double the table size?
for (const _ of ctx.db.game_queue.iter()) {
ctx.db.game_queue.insert(createUniqueRow());
}
Current state
AI states that iterators hold full snapshots of the data, so the above exampeles are safe.
- crates/core/src/host/instance_env.rs:724,748,774: datastore_*_scan_bsatn_chunks calls ChunkedWriter::
collect_iter eagerly.
- crates/core/src/host/v8/syscall/common.rs:299,320: scan syscalls buffer chunks then env.iters.insert(chunks.
into_iter()).
▄
So the iterator is a snapshot taken at filter(true) creation; deleting the current game_queue row
mid-iteration cannot invalidate it.
Request
Specify in the docs one of the following:
A. Insert/delete iterator invalidation is undefined and may change in the future.
B. Insert/delete should be treated as if they invalidate iterators.
C. Insert/delete does not invalidate iterators, but the data of a iterator row may change during a reducer (iterators hold references).
D. Insert/delete does not invalidate iterators. Iterators contain a snapshot of rows.
- Lingua principale
- Rust
- Stelle
- 25.3k
- Fork
- 1.1k
- Merge medio
- 4g 4h
- PR unite (30g)
- 53
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Nessuna 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 clockworklabs/SpacetimeDB
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
clockworklabs/SpacetimeDB#6127 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
clockworklabs/SpacetimeDB#6124 ·
I maintainer di solito rispondono entro 1 giorno
-
TS SDK: `Result` errors are serialized with the `ok` type (instance crash)Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
clockworklabs/SpacetimeDB#6122 ·
I maintainer di solito rispondono entro 1 giorno
-
CI flake: LintsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
clockworklabs/SpacetimeDB#5985 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
clockworklabs/SpacetimeDB#5943 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di clockworklabs/SpacetimeDB
Issue simili
-
area::tern-sync kind::cleanup triage::ready
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
review-bot
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
midagedev/bloomery#160 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
oxidecomputer/humility#737 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno