Datamigreringar

Kör Go-baserade datamigreringar som följer med en release.

Så fungerar det

Vissa ändringar kan inte uttryckas i SQL: att skriva om händelsedata till ett nytt binärt format, normalisera äldre data eller räkna om härledda fält. Varje sådan ändring levereras som en kodad migrering i applikationen. Det här jobbet kör alla registrerade migreringar, en efter en:

  1. Frågar varje migrering om det finns arbete kvar — varje migrering tillhandahåller en billig “väntar något?"-kontroll
  2. Kör de väntande — varje migrering skannar sina kandidatrader och skriver om dem. Läsningar tolererar tillståndet före migreringen, så driftsättningen och migreringen behöver inte gå i takt
  3. Återuppbygger eventuellt projektioner — en migrering som ändrar händelsedata på ett sätt som projektionerna behöver observera på nytt deklarerar det som en uppföljning. När migreringsomgången är klar schemalägger arbetaren Återuppbygg medarbetarprojektioner som en ny körning. Den kedjade körningen visas i admingränssnittet som en separat post som startar strikt efter att migreringskörningen slutförts

När jobbet körs

Jobbet är operatörsstyrt. Det är registrerat hos arbetaren men startar aldrig av sig självt — API:et kör det inte automatiskt vid uppstart. Starta det en gång per driftsättning när en migrering behövs, från AdminJobbkörningar.

Automatisk start inaktiverades eftersom autoskalade API-repliker skulle köa varsin dubblettkörning, och samtidiga körningar mot samma rader skapar databaskonflikter och en flod av återuppspelningshändelser.

Parametrar

Det här jobbet har inga parametrar. Vilka migreringar som körs bestäms av den driftsatta applikationsversionen.

Jobbresultat

Resultatet innehåller en nyckel per registrerad migrering:

VärdeBetydelse
"skipped" (sträng)Migreringens “väntar något?"-kontroll returnerade falskt — inget arbete att göra
Nästlad tabellMigreringen kördes; tabellen innehåller dess egna räknare (t.ex. bearbetade rader, fel)

När minst en migrering med flaggan “återuppbygger projektioner” körs innehåller resultatet också next_jobs: ["rebuild-employee-projections"], och arbetaren schemalägger det jobbet automatiskt.

Köra om

Migreringar är idempotenta: varje migrerings kandidatfråga filtrerar bort rader som redan har migrerats. Att köra om jobbet efter en delvis lyckad körning fortsätter där den förra körningen slutade.

Felsökning

ProblemLösning
Migreringsresultatet säger “skipped”Migreringen har inga väntande rader — det är det normala tillståndet när den är klar
Fel under en migreringÖppna körningsdetaljerna. Fel per rad visas där; att hela körningen misslyckas betyder oftast ett allvarligt tillstånd. Rätta datan och kör om
Uppföljningen med projektionsåteruppbyggnad kördes inteOm migreringskörningen inte nådde tillståndet “slutförd” (misslyckades halvvägs) hoppas uppföljningsschemaläggningen över. Åtgärda felet, kör om migreringarna och kör sedan Återuppbygg medarbetarprojektioner manuellt vid behov