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:

  1. Spør hver migrering om det gjenstår arbeid — hver migrering tilbyr en rimelig “venter?"-sjekk
  2. 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
  3. 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 AdministrasjonJobbkjøringer.

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:

VerdiBetydning
"skipped" (streng)Migreringens “venter?"-sjekk returnerte usann — ingenting å gjøre
Nøstet kartMigreringen 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

ProblemLø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 ikkeHvis 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