Datamigreringer
Kører Go-baserede datamigreringer, der leveres med en release.
Sådan virker det
Nogle ændringer kan ikke udtrykkes i SQL: omskrivning af hændelses-payloads til et nyt binært format, normalisering af gamle data, genberegning af afledte felter. Hver sådan ændring leveres som en kodet migrering i applikationen. Dette job kører hver registreret migrering efter hinanden:
- Spørger hver migrering om der er arbejde tilbage — hver migrering tilbyder et billigt “pending?"-tjek
- Kører de ventende — hver migrering scanner sine kandidatrækker og omskriver dem. Læsninger tolererer pre-migration-tilstanden, så deployment og migrering behøver ikke at være synkrone
- Genopbygger eventuelt projektioner — en migrering der ændrer hændelses-payloads på en måde, projektioner skal genoplev, deklarerer dette som follow-up. Efter migrerings-batchen er færdig, planlægger workeren Genopbyg medarbejderprojektioner som en frisk kørsel. Den kædede kørsel vises i admin-UI’et som en separat post startet strengt efter migrerings-kørslens afslutning
Hvornår det kører
Jobbet er operatør-drevet. Det er registreret hos workeren, men udløses aldrig automatisk — API’en kører det ikke ved opstart. Udløs det én gang pr. deployment, når en migrering er nødvendig, fra .
Auto-trigger blev deaktiveret, fordi autoskalerede API-replikaer hver ville sætte en dublet i kø, og samtidige eksekutorer på de samme rækker producerer database-kontention og en flod af replay-hændelser.
Parametre
Jobbet har ingen parametre. Sættet af migreringer der skal køres, er fastsat af den deployede applikations-version.
Jobresultater
Resultat-mappen indeholder én nøgle pr. registreret migrering:
| Værdi | Betydning |
|---|---|
"skipped" (streng) | Migreringens “pending?"-tjek returnerede false — intet arbejde at udføre |
| Indlejret map | Migreringen kørte; mappen indeholder dens egne tællere (f.eks. rækker behandlet, fejl) |
Når mindst én migrering markeret “rebuilds projections” kører, indeholder resultatet også next_jobs: ["rebuild-employee-projections"], og workeren planlægger automatisk det job.
Genkørsel
Migreringer er idempotente: hver migrerings kandidatforespørgsel filtrerer rækker fra, der allerede er migreret. Genkørsel af jobbet efter en delvis succes fortsætter, hvor den forrige slap.
Fejlfinding
| Problem | Løsning |
|---|---|
| Migreringsresultat siger “skipped” | Migreringen har ingen ventende rækker — det er den normale tilstand, når den er fuldført |
| Fejl under en migrering | Åbn kørselsdetaljerne. Pr.-række-fejl fremgår; en hel kørsel der fejler betyder normalt en fatal tilstand. Ret data og genkør |
| Projektions-genopbygnings-follow-up kørte ikke | Hvis migrerings-kørslen ikke nåede “fuldført” (fejlede undervejs), springes follow-up-dispatcheren over. Ret fejlen, kør migrerings igen, og kør derefter Genopbyg medarbejderprojektioner manuelt om nødvendigt |