Skip to content

Commit cf072d4

Browse files
BerengereCMathieuGilet
authored andcommitted
Add an ADR about rollbacks and migrate down scripts
1 parent bcc8d99 commit cf072d4

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

docs/adr/0056-migrate-down.md

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# 56. Rollbacks et Migrate Down
2+
3+
Date : 2024-12-19
4+
5+
## État
6+
7+
Draft
8+
9+
## Contexte
10+
11+
Nous souhaitons clarifier les procédures de rollback sur l'environnement production (retour en arrière de version classiquement).
12+
Meme si nous préférons privilégier l'application d'un patch en production pour résoudre un incident, il peut être nécessaire de faire un rollback de version, selon la nature de l'incident.
13+
Dans le contexte actuel, l'application d'un patch est une opération longue (25 min minimum). Une semi-automatisation permettrait d'amoindrir ce délai et de préférer cette solution au rollback de version dans certains cas.
14+
15+
Les rollbacks de versions ne contenant pas de migration peuvent être effectués aujourd'hui en production. Pour cela, on redéploie la version précédante sur toutes les apps simultanément.
16+
17+
Concernant les versions avec migration de données, le rollback est plus dangereux :
18+
- risque de perte de données,
19+
- un ordre d’exécution incertain peut causer des deadlocks,
20+
- incertitude quand à la qualité des « down » développés : pas toujours écrits, pas de tests, pas de validation…
21+
- Nécessité de synchroniser avec les responsables des différents incréments pour s’assurer que tout va bien se passer
22+
- Nécessité de bloquer les recettes potentielles en cours et corriger l'environnement de recette avant de refaire une Mise En Production.
23+
24+
A l'avenir, le déploiement continu permettra de résoudre une partie des problèmes rencontrés et de limiter les risques.
25+
Dans le contexte d’aller vers du déploiement plus continu, l’effort à mettre transite ainsi vers notre rapidité à mettre en production.
26+
Le lien entre les captains et les équipes de dev reste essentiel, en cas de soucis les équipes doivent rester alerte pour prévenir de leurs incertitudes au plus tôt. Côté captains il faut continuer à bien remonter les alertes pour créer cet échange le plus rapidement possible.
27+
28+
### Solution
29+
30+
**Description**
31+
32+
Après discussion en équipe, les captains proposent les préconisations suivantes :
33+
- Les PRs de migration de données ne doivent contenir que la migration. Idéalement dans 2 MEP différentes.
34+
- Séparer le code pour pouvoir revert plus facilement l’une ou l’autre.
35+
36+
(Idéalement, avoir une MEP échelonnée elles sont dans deux MEP différentes)
37+
- Les captains sont au courant au plus tot => On aimerait être reviewer de tous les scripts de migration
38+
- Nos précos pour les scripts de migration
39+
- Les migrates down sont obligatoires
40+
41+
(on peut en avoir besoin meme si on les fait manuellement, c’est une aide précieuse)
42+
43+
- On doit être capable de migrate up => migrate down => migrate up
44+
45+
Donc les scripts de migrations doivent être Idempotent,
46+
47+
pas de modification de type,
48+
49+
pas de pertes ni modifications de données (=> écrire un script différent dans ce cas, qui nécessitera une intervention captains, hors phase de mise en production)
50+
51+
La clause default sur le create/alter table est autorisée.
52+
53+
54+
**Avantage(s):**
55+
- Possiblité de mitiguer rapidement un incident en executant des rollbacks en production.
56+
- Pas de risque de perte de données sur un rollback.
57+
58+
**Inconvénient(s):**
59+
- Risque de délai supplémentaire pour les PR avec migration.
60+
61+
## Décision
62+
63+
## Conséquences

0 commit comments

Comments
 (0)