Skip to content

Datamigreringer

Kjører én navngitt Go-basert datamigrering som følger med en utgivelse.

Slik fungerer det

Noen endringer kan ikke uttrykkes i SQL: omskriving av hendelsesdata til et nytt binærformat, normalisering av eldre data, omberegning av avledede felter. Hver slik endring følger med som en kodet migrering — en oppgave — i applikasjonen.

Du kjører én oppgave om gangen, ved navn. Det finnes bevisst ingen «kjør alt»-modus: å feie gjennom alle migreringer på én gang er ubegrenset og går på tvers av alle arbeidsområder, og det kunne tidligere utløses ved å la ett felt stå tomt. Feltet Task er påkrevd, og nedtrekkslisten viser nøyaktig de oppgavene den installerte versjonen registrerer.

En kjøring gjør så følgende:

  1. Viser en forhåndsvisning som standard — med Apply av rapporterer oppgaven hva den ville endret, uten å skrive noe. Les forhåndsvisningen først; det er hele poenget
  2. Skriver bare når du sier fra — slå på Apply for å gjennomføre. Skjemaet krever at du bekrefter først, fordi endringene skrives på tvers av alle arbeidsområder i omfanget og ikke kan rulles tilbake
  3. Bygger eventuelt projeksjoner på nytt — en oppgave som endrer hendelsesdata på en måte projeksjoner må observere på nytt, deklarerer dette som oppfølging. Etter kjøringen planlegger workeren Bygg ansattprojeksjoner på nytt som en ny kjøring. Den lenkede kjøringen vises i admin-grensesnittet som en egen post startet strengt etter at migreringskjøringen er fullført

Når den kjører

Jobben er operatørstyrt. Den er registrert hos workeren, men utløses aldri av seg selv — API-et kjører den ikke ved oppstart. Utløs den når en migrering trengs, fra Admin › Jobbkjøringer. Den kan bare kjøres fra systemarbeidsområdet og vises ikke i noe annet arbeidsområde.

Automatisk utløsning ble slått av fordi autoskalerte API-replikaer hver ville legge en duplikatkjøring i kø, og samtidige kjøringer mot de samme radene gir databasekonflikter og en flom av replay-hendelser.

Parametere

ParameterPåkrevdBetydning
TaskJaMigreringen som skal kjøres, valgt blant de registrerte oppgavene. En kjøring uten oppgavevalg avvises før noe arbeid starter — det samme gjelder et navn som ikke er registrert
ApplyNeiAv (standard) forhåndsviser uten å skrive, for oppgaver som støtter det; oppgaver som alltid skriver, ignorerer feltet. På gjennomføres endringene, og de kan ikke angres
EmployeeNeiBegrenser en avgrenset oppgave til én ansatt — nyttig for å teste på én ansatt før en global kjøring. Oppgaver som alltid kjører globalt, ignorerer feltet

Det programmatiske API-et godtar de samme innstillingene, pluss workspace_id for å begrense en avgrenset oppgave til ett arbeidsområde; det finnes ingen arbeidsområdevelger i skjemaet.

{"jobs":["migrations"],"options":{"tasks":["<oppgavenavn>"]}}
{"jobs":["migrations"],"options":{"tasks":["<oppgavenavn>"],"apply":true}}

Innstillingene en kjøring fikk, vises i kolonnen Parametere i kjøringslisten. Kolonnen er skjult som standard — slå den på fra kolonnemenyen for å skille to kjøringer av samme jobb fra hverandre.

Jobbresultater

Resultatet inneholder dry_run (det motsatte av Apply) og én nøkkel per oppgave som kjørte:

NøkkelBetydning
dry_runtrue når ingenting ble skrevet — kjøringen viste bare en forhåndsvisning
appliedOm oppgaven faktisk skrev endringene sine
affected_countHvor mange enheter oppgaven berørte, eller ville berørt
by_workspaceAntall per arbeidsområde, med arbeidsområdenavn slått opp
detailsDe berørte enhetene, med de før/etter-opplysningene oppgaven registrerer

Et navn som ikke er en registrert oppgave, vises som "unknown task" ved siden av navnet.

Når en oppgave merket «bygger projeksjoner på nytt» kjører, inneholder resultatet også next_jobs: ["rebuild-employee-projections"], og workeren planlegger den jobben automatisk.

Kjøre på nytt

Alle registrerte oppgaver kan kjøres på nytt ved behov. Hver oppgaves kandidatspørring filtrerer bort rader som allerede er migrert, så en ny kjøring etter en delvis vellykket kjøring fortsetter der forrige slapp, og en ny kjøring av en fullført oppgave gjør ingenting og rapporterer null berørte.

Feilsøking

ProblemLøsning
«No task selected»Velg en oppgave i feltet Task. Det finnes ingen «kjør alt»-modus — å navngi oppgaven er den eneste måten å kjøre jobben på
Kjøringen rapporterer "unknown task"Navnet er ikke registrert i den installerte versjonen — oftest en oppgave som siden er avviklet. Velg fra nedtrekkslisten i stedet for å skrive inn et navn
Run Job forblir deaktivertApply er på, og bekreftelsen under er ikke huket av. Les advarselen og huk av, eller slå av Apply igjen for å forhåndsvise i stedet
affected_count er 0Oppgaven har ingen ventende rader — normaltilstanden når den er fullført
Feil under en oppgaveÅpne kjøringsdetaljene. Feil per rad vises; at hele kjøringen feiler betyr vanligvis en fatal tilstand. Rett dataene og kjør på nytt
Oppfølgingen med projeksjonsgjenoppbygging kjørte ikkeHvis kjøringen ikke nådde tilstanden «completed» (feilet underveis), hoppes oppfølgingen over. Rett feilen, kjør oppgaven på nytt, og kjør deretter Bygg ansattprojeksjoner på nytt manuelt om nødvendig