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:

  1. Spørger hver migrering om der er arbejde tilbage — hver migrering tilbyder et billigt “pending?"-tjek
  2. 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
  3. 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 AdministrationJobkørsler.

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ærdiBetydning
"skipped" (streng)Migreringens “pending?"-tjek returnerede false — intet arbejde at udføre
Indlejret mapMigreringen 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

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