Datamigreringer
Kjører Go-baserte datamigreringer som følger med en utgivelse.
Slik fungerer det
Noen endringer kan ikke uttrykkes i SQL: omskriving av hendelsesdata til et nytt binærformat, normalisering av eldre data, omberegning av avledede felter. Hver slik endring følger med som en kodet migrering i applikasjonen. Denne jobben kjører hver registrerte migrering, én etter én:
- Spør hver migrering om det gjenstår arbeid — hver migrering tilbyr en rimelig “venter?"-sjekk
- Kjører de som venter — hver migrering skanner kandidatradene sine og skriver dem om. Lesing tåler tilstanden før migreringen, så utrullingen og migreringen trenger ikke å skje i takt
- Bygger eventuelt opp projeksjoner på nytt — en migrering som endrer hendelsesdata på en måte som projeksjoner må observere på nytt, erklærer dette som en oppfølging. Etter at migreringsbatchen er fullført, planlegger arbeideren Bygg ansattprojeksjoner på nytt som en ny kjøring. Den kjedede kjøringen vises i administrasjonsgrensesnittet som en separat oppføring som starter strengt etter at migreringskjøringen er fullført
Når den kjører
Jobben er operatørstyrt. Den er registrert hos arbeideren, men utløser seg aldri selv — API-et kjører den ikke automatisk ved oppstart. Utløs den én gang per utrulling når en migrering trengs, fra .
Automatisk utløsing ble deaktivert fordi autoskalerte API-replikaer hver ville sette en duplisert kjøring i kø, og samtidige kjøringer mot de samme radene gir databasekonflikter og en flom av avspillingshendelser.
Parametere
Denne jobben har ingen parametere. Settet med migreringer som skal kjøres, er fastsatt av den utrullede applikasjonsversjonen.
Jobbresultater
Resultatkartet inneholder én nøkkel per registrerte migrering:
| Verdi | Betydning |
|---|---|
"skipped" (streng) | Migreringens “venter?"-sjekk returnerte usann — ingenting å gjøre |
| Nøstet kart | Migreringen kjørte; kartet inneholder sine egne tellere (f.eks. behandlede rader, feil) |
Når minst én migrering som er merket med “bygger opp projeksjoner” kjører, inkluderer resultatet også next_jobs: ["rebuild-employee-projections"], og arbeideren planlegger automatisk den jobben.
Kjøre på nytt
Migreringer er idempotente: hver migrerings kandidatspørring filtrerer ut rader som allerede er migrert. Å kjøre jobben på nytt etter en delvis vellykket kjøring fortsetter der den forrige kjøringen slapp.
Feilsøking
| Problem | Løsning |
|---|---|
| Migreringsresultatet sier “skipped” | Migreringen har ingen ventende rader — det er normaltilstanden når den er fullført |
| Feil under en migrering | Åpne kjøringsdetaljene. Feil per rad vises; at hele kjøringen feiler betyr vanligvis en fatal tilstand. Rett opp dataene og kjør på nytt |
| Oppfølgingen for projeksjonsoppbygging kjørte ikke | Hvis migreringskjøringen ikke gikk inn i “completed”-tilstanden (feilet underveis), hoppes oppfølgingsutsenderen over. Rett opp feilen, kjør migreringene på nytt, og kjør deretter Bygg ansattprojeksjoner på nytt manuelt ved behov |