Ga naar inhoud

Datamigraties

Voert één met naam aangeduide Go-datamigratie uit die met een release wordt meegeleverd.

Hoe het werkt

Sommige wijzigingen laten zich niet in SQL uitdrukken: event-payloads herschrijven naar een nieuw binair formaat, verouderde gegevens normaliseren, afgeleide velden herberekenen. Elke zo’n wijziging wordt als gecodeerde migratie — een taak — in de applicatie meegeleverd.

U voert één taak tegelijk uit, op naam. Er is bewust geen “alles uitvoeren”-modus: in één keer door alle migraties heen vegen is onbegrensd en raakt elke werkruimte, en voorheen volstond het om één veld leeg te laten. Het veld Task is verplicht en de keuzelijst toont precies de taken die de uitgerolde versie registreert.

Een uitvoering verloopt dan zo:

  1. Standaard een voorbeeld — met Apply uit rapporteert de taak wat zij zou wijzigen, zonder iets weg te schrijven. Lees eerst het voorbeeld; daar is het voor
  2. Schrijft alleen op uw teken — zet Apply aan om door te voeren. Het formulier vraagt eerst om een bevestiging, omdat de wijzigingen in elke betrokken werkruimte worden weggeschreven en niet kunnen worden teruggedraaid
  3. Herbouwt eventueel projecties — een taak die event-payloads zo wijzigt dat projecties ze opnieuw moeten verwerken, meldt dat als vervolgtaak. Na afloop plant de worker Medewerkersprojecties herbouwen als nieuwe uitvoering. Die gekoppelde uitvoering verschijnt in de beheerinterface als een aparte regel die strikt na het voltooien van de migratie-uitvoering is gestart

Wanneer het wordt uitgevoerd

De taak is operator-gestuurd. Zij is bij de worker geregistreerd maar start nooit uit zichzelf — de API voert haar niet uit bij het opstarten. Start haar wanneer een migratie nodig is, via Beheer › Taakuitvoeringen. Zij kan alleen vanuit de systeemwerkruimte worden uitgevoerd en staat in geen enkele andere werkruimte in de lijst.

Automatisch starten is uitgeschakeld omdat automatisch geschaalde API-replica’s elk een dubbele uitvoering in de wachtrij zouden zetten, en gelijktijdige uitvoeringen op dezelfde rijen zorgen voor databasecontentie en een stroom replay-events.

Parameters

ParameterVerplichtBetekenis
TaskJaDe uit te voeren migratie, gekozen uit de geregistreerde taken. Een uitvoering die geen taak noemt wordt geweigerd voordat er werk begint, net als een naam die niet geregistreerd is
ApplyNeeUit (standaard) toont een voorbeeld zonder te schrijven, voor taken die dat ondersteunen; taken die altijd schrijven negeren het. Aan voert de wijzigingen door, en die zijn niet ongedaan te maken
EmployeeNeeBeperkt een afgebakende taak tot één medewerker — handig om eerst op één medewerker te proberen vóór een globale uitvoering. Taken die altijd globaal werken negeren het

De programmatische API accepteert dezelfde opties, plus workspace_id om een afgebakende taak tot één werkruimte te beperken; in het formulier zit geen werkruimtekiezer.

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

De opties waarmee een uitvoering is gestart, staan in de kolom Parameters van de uitvoeringslijst. Die kolom is standaard verborgen — zet haar aan via het kolommenu om twee uitvoeringen van dezelfde taak uit elkaar te houden.

Taakresultaten

Het resultaat bevat dry_run (het omgekeerde van Apply) en één sleutel per uitgevoerde taak:

SleutelBetekenis
dry_runtrue wanneer er niets is weggeschreven — de uitvoering toonde alleen een voorbeeld
appliedOf de taak haar wijzigingen daadwerkelijk heeft weggeschreven
affected_countHoeveel entiteiten de taak heeft geraakt, of zou raken
by_workspaceAantallen per werkruimte, met opgezochte werkruimtenamen
detailsDe geraakte entiteiten, met de voor/na-gegevens die de taak vastlegt

Een naam die geen geregistreerde taak is, verschijnt als "unknown task" bij die naam.

Wanneer een taak met de markering “herbouwt projecties” draait, bevat het resultaat ook next_jobs: ["rebuild-employee-projections"] en plant de worker die taak automatisch in.

Opnieuw uitvoeren

Alle geregistreerde taken zijn op verzoek opnieuw uit te voeren. De selectiequery van elke taak filtert rijen weg die al gemigreerd zijn, dus opnieuw uitvoeren na een gedeeltelijk succes gaat verder waar de vorige keer stopte, en een voltooide taak opnieuw uitvoeren doet niets en meldt nul geraakte entiteiten.

Problemen oplossen

ProbleemOplossing
“No task selected”Kies een taak in het veld Task. Er is geen “alles uitvoeren”-modus — de taak noemen is de enige manier om deze taak te draaien
De uitvoering meldt "unknown task"De naam is niet geregistreerd in de uitgerolde versie — meestal een taak die inmiddels is uitgefaseerd. Kies uit de lijst in plaats van een naam te typen
Run Job blijft uitgeschakeldApply staat aan en de bevestiging eronder is niet aangevinkt. Lees de waarschuwing en vink aan, of zet Apply weer uit om alleen een voorbeeld te bekijken
affected_count is 0De taak heeft geen openstaande rijen — de normale toestand zodra zij voltooid is
Fouten tijdens een taakOpen de uitvoeringsdetails. Fouten per rij worden getoond; als de hele uitvoering faalt, duidt dat meestal op een fatale toestand. Corrigeer de gegevens en voer opnieuw uit
De vervolgtaak voor projectieherbouw is niet gestartAls de uitvoering de status “completed” niet bereikte (halverwege mislukt), wordt de vervolgtaak overgeslagen. Herstel de fout, voer de taak opnieuw uit en start daarna zo nodig handmatig Medewerkersprojecties herbouwen