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

docs: does insert/delete invalidate iterators?

Aperta Adatta ai principianti
#6,146 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à
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

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

  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 clockworklabs/SpacetimeDB

Tutte le issue di clockworklabs/SpacetimeDB

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.