Skip to content

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:

  1. 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
  2. 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
  3. Å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 Admin › Jobbkörningar. 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

ParameterObligatoriskBetydelse
TaskJaMigreringen 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
ApplyNejAv (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
EmployeeNejBegrä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:

NyckelBetydelse
dry_runtrue när ingenting skrevs — körningen förhandsgranskade bara
appliedOm uppgiften faktiskt skrev sina ändringar
affected_countHur många enheter uppgiften berörde, eller skulle beröra
by_workspaceAntal per arbetsyta, med arbetsytornas namn upplösta
detailsDe 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

ProblemLö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 inaktiveradApply ä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 0Uppgiften 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 inteOm 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