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:
- 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
- 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
- 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 . 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
| Parameter | Påkrevd | Betydning |
|---|---|---|
| Task | Ja | Migreringen 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 |
| Apply | Nei | Av (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 |
| Employee | Nei | Begrenser 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økkel | Betydning |
|---|---|
dry_run | true når ingenting ble skrevet — kjøringen viste bare en forhåndsvisning |
applied | Om oppgaven faktisk skrev endringene sine |
affected_count | Hvor mange enheter oppgaven berørte, eller ville berørt |
by_workspace | Antall per arbeidsområde, med arbeidsområdenavn slått opp |
details | De 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
| Problem | Lø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 deaktivert | Apply 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 0 | Oppgaven 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 ikke | Hvis 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 |