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:
- Frågar varje migrering om det finns arbete kvar — varje migrering tillhandahåller en billig “väntar något?"-kontroll
- 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
- Å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 .
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ärde | Betydelse |
|---|---|
"skipped" (sträng) | Migreringens “väntar något?"-kontroll returnerade falskt — inget arbete att göra |
| Nästlad tabell | Migreringen 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
| Problem | Lö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 inte | Om 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 |