Ga naar inhoud

Datamigaties

Voert Go-gebaseerde datamigaties uit die bij een release worden meegeleverd.

Hoe het werkt

Sommige wijzigingen kunnen niet in SQL worden uitgedrukt: het herschrijven van gebeurtenispayloads naar een nieuw binair formaat, het normaliseren van verouderde gegevens, het herberekenen van afgeleide velden. Elke dergelijke wijziging wordt als een gecodeerde migratie in de applicatie meegeleverd. Deze taak voert elke geregistreerde migratie achtereenvolgens uit:

  1. Vraagt elke migratie of er nog werk te doen is — elke migratie biedt een goedkope ‘in behandeling?’-controle
  2. Voert de openstaande migraties uit — elke migratie scant de kandidaatrijen en herschrijft ze. Leesbewerkingen verdragen de toestand van vóór de migratie, zodat de uitrol en de migratie niet gesynchroniseerd hoeven te zijn
  3. Bouwt desgewenst projecties opnieuw op — een migratie die gebeurtenispayloads aanraakt op een manier die projecties opnieuw moeten waarnemen, declareert dat als vervolgactie. Nadat de migratiesbatch is voltooid, plant de worker Medewerkersprojecties herbouwen als een nieuwe uitvoering in. De gekoppelde uitvoering verschijnt in de beheerinterface als een afzonderlijk item dat strikt na de voltooiing van de migratieuitvoering start

Wanneer het wordt uitgevoerd

De taak wordt door een operator gestuurd. De taak is geregistreerd bij de worker, maar activeert zichzelf nooit — de API voert de taak niet automatisch uit bij het opstarten. Activeer de taak eenmalig per uitrol wanneer een migratie nodig is, via BeheerTaakuitvoeringen.

Automatische activering is uitgeschakeld omdat geschaalde API-replica’s elk een dubbele uitvoering zouden inplannen, en gelijktijdige uitvoeringen op dezelfde rijen leiden tot databaseconflicten en een vloed van herhaalde gebeurtenissen.

Parameters

Deze taak heeft geen parameters. De set uit te voeren migraties wordt bepaald door de geïmplementeerde applicatieversie.

Taakresultaten

De resultatenmap bevat één sleutel per geregistreerde migratie:

WaardeBetekenis
"skipped" (string)De ‘in behandeling?’-controle van de migratie retourneerde false — geen werk te doen
Geneste mapDe migratie is uitgevoerd; de map bevat eigen tellers (bijv. verwerkte rijen, fouten)

Wanneer ten minste één migratie met de markering ‘rebuilds projections’ wordt uitgevoerd, bevat het resultaat ook next_jobs: ["rebuild-employee-projections"] en plant de worker die taak automatisch in.

Opnieuw uitvoeren

Migraties zijn idempotent: de kandidaatquery van elke migratie filtert rijen die al zijn gemigreerd eruit. Als de taak na een gedeeltelijk geslaagde uitvoering opnieuw wordt uitgevoerd, wordt hervat waar de vorige uitvoering was gestopt.

Problemen oplossen

ProbleemOplossing
Migratieresultaat toont “skipped”De migratie heeft geen openstaande rijen — dit is de normale toestand zodra de migratie is voltooid
Fouten tijdens een migratieOpen de uitvoeringsdetails. Fouten per rij worden weergegeven; een volledige mislukking duidt doorgaans op een fatale conditie. Herstel de gegevens en voer de taak opnieuw uit
Vervolgstap voor herbouwen van projecties is niet uitgevoerdAls de migratieuitvoering de toestand ‘voltooid’ niet heeft bereikt (halverwege mislukt), wordt de vervolgdispatcher overgeslagen. Los de fout op, voer de migraties opnieuw uit en voer vervolgens Medewerkersprojecties herbouwen indien nodig handmatig uit