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 :
- Demande à chaque migration s’il reste du travail — chaque migration fournit une vérification « en attente ? » peu coûteuse
- 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
- 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 .
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 :
| Valeur | Signification |
|---|---|
"skipped" (chaîne) | La vérification « en attente ? » de la migration a renvoyé faux — rien à faire |
| Map imbriquée | La 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ème | Solution |
|---|---|
| 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 migration | Ouvrez 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 lieu | Si 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 |