Backfill MongoDB data into PostgreSQL and verify ongoing parity
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- mongodb, postgresql
- Ambito
- databases
Direzione di ricerca
Inizia dal contratto di dominio e dallo schema di espansione di Room/RaceSession di #200 e #203, poi esamina il contesto di dual-write e deployment in PR #171 e #176, oltre alla cronologia delle migrazioni dello schema. Traccia i mappings necessari e i vincoli di rollback prima di definire il backfill riprendibile. Il lavoro è completato quando i controlli di reconciliation, retry e concurrency, i test mirati e la documentazione operativa coprono i criteri di accettazione elencati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Part of #199.
Goal
Turn PostgreSQL dual writes into a trustworthy migration target by copying historical MongoDB data and continuously checking parity.
For the competition-room foundation, this backfill must target the new Room/RaceSession model rather than preserving the current assumption that a room is itself one racing session.
RaceSession mapping
- Convert each existing MongoDB room into one PostgreSQL Room plus one RaceSession for its current event.
- Attach every embedded attempt to that RaceSession while preserving deterministic attempt and solve IDs.
- Populate session participant state according to the approved domain contract.
- Preserve room identity, access code, ownership, privacy, timestamps, and deletion/expiration state.
- Make the mapping explicit and repeatable; do not attempt to infer event sessions whose attempts were already deleted by the legacy event-change behavior.
- Verify concurrent live writes are neither lost nor duplicated during the backfill.
Acceptance criteria
- Implement an idempotent, resumable backfill for users/preferences, rooms, race sessions, participant state, attempts, durable solve results, and sanitized metrics.
- Support dry-run, bounded batches, progress checkpoints, and safe retries.
- Do not copy OAuth access tokens or prohibited metric fields.
- Produce reconciliation output for record counts, missing identifiers, duplicate identifiers, room/session relationships, penalty fields, and representative aggregates.
- Verify every attempt belongs to the expected RaceSession and every RaceSession belongs to the expected Room.
- Verify writes arriving during the backfill are not lost or duplicated.
- Document operational invocation, expected runtime/load, alerts, failure recovery, and how to rerun only failed ranges.
- Add focused tests for deterministic IDs, cursor boundaries, retry behavior, session mapping, and reconciliation failures.
Dependencies
- Stable production dual writes from PR #171, deployed through #176.
- The Room/RaceSession domain contract and expansion schema from #200 and #203.
- The schema and migration history must remain compatible with rollback requirements.
Unlocks
- #202
- #174
- #160
- Lingua principale
- JavaScript
- Stelle
- 30
- Fork
- 9
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri 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 coder13/LetsCube
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
area: data area: platform enhancement priority: P1
Difficoltà 5/5 Più di una settimana Idoneità per principianti 28/100
Tutte le issue di coder13/LetsCube
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
mksglu/context-mode#1200 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
neondatabase/website#5944 ·
-
module: core
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
bigbluebutton/bigbluebutton#25849 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
jaegertracing/jaeger-ui#4506 ·