Datamigreringar
Kör en namngiven Go-baserad datamigrering som levereras med en release.
Så fungerar det
Vissa ändringar går inte att uttrycka i SQL: skriva om händelsedata till ett nytt binärformat, normalisera äldre data, räkna om härledda fält. Varje sådan ändring levereras som en kodad migrering — en uppgift — i applikationen.
Du kör en uppgift i taget, med namn. Det finns medvetet inget “kör allt”-läge: att svepa igenom alla migreringar på en gång är obegränsat och går tvärs över alla arbetsytor, och det gick tidigare att utlösa bara genom att lämna ett fält tomt. Fältet Task är obligatoriskt, och listan visar exakt de uppgifter som den installerade versionen registrerar.
En körning gör sedan följande:
- Förhandsgranskar som standard — med Apply av rapporterar uppgiften vad den skulle ändra, utan att skriva något. Läs förhandsgranskningen först; det är hela poängen
- Skriver bara när du säger till — slå på Apply för att genomföra. Formuläret kräver att du bekräftar först, eftersom ändringarna skrivs tvärs över alla arbetsytor i omfånget och inte kan återställas
- Återuppbygger eventuellt projektioner — en uppgift som ändrar händelsedata på ett sätt som projektioner måste observera på nytt deklarerar det som en uppföljning. Efter körningen schemalägger workern Återuppbygg medarbetarprojektioner som en ny körning. Den kedjade körningen visas i admingränssnittet som en separat post som startats strikt efter att migreringskörningen slutförts
När jobbet körs
Jobbet är operatörsstyrt. Det är registrerat hos workern men utlöses aldrig av sig självt — API:et kör det inte vid uppstart. Utlös det när en migrering behövs, från . Det kan bara köras från systemarbetsytan och visas inte i någon annan arbetsyta.
Automatisk utlösning stängdes av eftersom autoskalade API-repliker var och en skulle köa en dubblettkörning, och samtidiga körningar mot samma rader ger databaskonflikter och en flod av replay-händelser.
Parametrar
| Parameter | Obligatorisk | Betydelse |
|---|---|---|
| Task | Ja | Migreringen som ska köras, vald bland de registrerade uppgifterna. En körning utan vald uppgift avvisas innan något arbete påbörjas — detsamma gäller ett namn som inte är registrerat |
| Apply | Nej | Av (standard) förhandsgranskar utan att skriva, för uppgifter som stödjer det; uppgifter som alltid skriver ignorerar fältet. På genomförs ändringarna, och de kan inte ångras |
| Employee | Nej | Begränsar en avgränsad uppgift till en enskild medarbetare — användbart för att testa på en medarbetare före en global körning. Uppgifter som alltid kör globalt ignorerar fältet |
Det programmatiska API:et accepterar samma inställningar, plus workspace_id för att begränsa en avgränsad uppgift till en arbetsyta; det finns ingen arbetsytsväljare i formuläret.
{"jobs":["migrations"],"options":{"tasks":["<uppgiftsnamn>"]}}
{"jobs":["migrations"],"options":{"tasks":["<uppgiftsnamn>"],"apply":true}}De inställningar en körning fick visas i kolumnen Parametrar i körningslistan. Kolumnen är dold som standard — slå på den från kolumnmenyn för att skilja två körningar av samma jobb åt.
Jobbresultat
Resultatet innehåller dry_run (motsatsen till Apply) och en nyckel per uppgift som kördes:
| Nyckel | Betydelse |
|---|---|
dry_run | true när ingenting skrevs — körningen förhandsgranskade bara |
applied | Om uppgiften faktiskt skrev sina ändringar |
affected_count | Hur många enheter uppgiften berörde, eller skulle beröra |
by_workspace | Antal per arbetsyta, med arbetsytornas namn upplösta |
details | De berörda enheterna, med de före/efter-uppgifter uppgiften registrerar |
Ett namn som inte är en registrerad uppgift visas som "unknown task" bredvid namnet.
När en uppgift märkt “återuppbygger projektioner” körs innehåller resultatet även next_jobs: ["rebuild-employee-projections"], och workern schemalägger det jobbet automatiskt.
Köra om
Alla registrerade uppgifter går att köra om vid behov. Varje uppgifts kandidatfråga filtrerar bort rader som redan migrerats, så en omkörning efter en delvis lyckad körning fortsätter där den förra slutade, och en omkörning av en slutförd uppgift gör ingenting och rapporterar noll berörda.
Felsökning
| Problem | Lösning |
|---|---|
| “No task selected” | Välj en uppgift i fältet Task. Det finns inget “kör allt”-läge — att namnge uppgiften är enda sättet att köra jobbet |
Körningen rapporterar "unknown task" | Namnet är inte registrerat i den installerade versionen — oftast en uppgift som sedan avvecklats. Välj från listan i stället för att skriva in ett namn |
| Run Job förblir inaktiverad | Apply är på och bekräftelsen nedanför är inte ikryssad. Läs varningen och kryssa i, eller slå av Apply igen för att förhandsgranska i stället |
affected_count är 0 | Uppgiften har inga väntande rader — normaltillståndet när den är slutförd |
| Fel under en uppgift | Öppna körningsdetaljerna. Fel per rad visas; att hela körningen misslyckas betyder oftast ett fatalt tillstånd. Rätta data och kör om |
| Uppföljningen med projektionsåteruppbyggnad kördes inte | Om körningen inte nådde tillståndet “completed” (misslyckades halvvägs) hoppas uppföljningen över. Rätta felet, kör om uppgiften och kör sedan Återuppbygg medarbetarprojektioner manuellt vid behov |