Migrations de données

Exécute les migrations de données écrites en Go embarquées dans la version livrée.

Fonctionnement

Certains changements ne s’expriment pas en SQL : réécrire des charges utiles d’événements au nouveau format binaire, normaliser des données héritées, recalculer des champs dérivés. Chacun de ces changements est livré comme migration codée dans l’application. Cette tâche exécute chaque migration enregistrée, l’une après l’autre :

  1. Demande à chaque migration s’il reste du travail — chaque migration fournit une vérification « en attente ? » peu coûteuse
  2. Exécute celles en attente — chaque migration analyse ses lignes candidates et les réécrit. Les lectures tolèrent l’état pré-migration, donc le déploiement et la migration n’ont pas à être synchrones
  3. Reconstruit éventuellement les projections — une migration qui modifie les charges utiles d’événements de telle sorte que les projections doivent les ré-observer le déclare en suivi. Une fois le lot terminé, le worker planifie Reconstruction des projections d’employés comme nouvelle exécution. L’exécution chaînée apparaît dans l’interface admin comme une entrée séparée démarrée strictement après la fin de la tâche migrations

Quand elle s’exécute

La tâche est déclenchée par l’opérateur. Elle est enregistrée auprès du worker mais ne se déclenche jamais automatiquement — l’API ne la lance pas au démarrage. Lancez-la une fois par déploiement nécessitant une migration, depuis AdministrationExécutions de tâches.

Le déclenchement automatique a été désactivé car les répliques d’API autoscalées en mettraient chacune en file une copie, et des exécuteurs concurrents sur les mêmes lignes produisent de la contention de base de données et un afflux d’événements de rejeu.

Paramètres

Cette tâche n’a pas de paramètres. L’ensemble des migrations à exécuter est fixé par la version applicative déployée.

Résultats de la tâche

Le résultat contient une clé par migration enregistrée :

ValeurSignification
"skipped" (chaîne)La vérification « en attente ? » de la migration a renvoyé faux — rien à faire
Map imbriquéeLa migration a été exécutée ; la map contient ses propres compteurs (lignes traitées, erreurs, etc.)

Lorsqu’au moins une migration marquée « reconstruit les projections » a tourné, le résultat inclut également next_jobs: ["rebuild-employee-projections"] et le worker planifie automatiquement cette tâche.

Relance

Les migrations sont idempotentes : la requête candidate de chaque migration filtre les lignes déjà migrées. Relancer la tâche après un succès partiel reprend là où la précédente s’est arrêtée.

Dépannage

ProblèmeSolution
Résultat d’une migration : « skipped »La migration n’a aucune ligne en attente — c’est l’état normal une fois qu’elle est terminée
Erreurs pendant une migrationOuvrez les détails. Les erreurs par ligne sont remontées ; un échec global signale en général une condition fatale. Corrigez les données et relancez
Le suivi de reconstruction n’a pas eu lieuSi l’exécution migrations n’est pas passée à l’état « terminé » (échec en cours), le dispatcher de suivi est ignoré. Corrigez l’échec, relancez migrations, puis relancez Reconstruction des projections d’employés manuellement si nécessaire