[process] Rerun a process
Created originally on Bitbucket by cdevienne (Christophe de Vienne)
We need to be able to rerun a process from a given step.
Here is the initial specification for this feature (in french).
Le besoin initial est de pouvoir relancer en entier des process en échec.
A terme on envisage la relance partielle.
Relance de process
UI
On ajoutera une commande xbusctl "ps replay" (à débattre), qui prendra les mêmes filtres que toutes les commandes "ps".
Plus tard on ajoutera des options pour relancer juste les noeuds en erreur, voir des noeuds arbitraires.
API
Sur le service Director on ajoutera une fonction "ProcessReplay" (à débattre). Ses paramètres seront:
- l'ID du process
- une liste de noeuds en amont duquel on relance
- la version du pipeline à lancer ('same', 'newest', 'matchagain', version spécifique)
- un champ de saisie libre ("reason") qui décrit pourquoi le process a été relancé
Dans un premier temps la liste de noeuds devra contenir uniquement un noeud emetteur.
La version du pipeline ne pourra être changée que si le noeud relancé est l'émetteur déclencheur du process.
Conditions
On interdit la relance de process non terminé, ou dont un process de relance du même groupe de process n'est pas terminé.
Autrement dit, dans l'ensemble des process de relances directs ou en cascade d'un même process original, il ne peut y avoir au maximum qu'un seule process non terminé.
Internals
Quand un process est relancé, on crée un nouveau process qui héritera l'état du process initial concernant les noeuds sur lesquels la relance est opérée.
Le nouveau process gardera une référence vers le process initial, qu'on n'appelera pas 'parent' car je soupçonne que ce vocable aura du sens pour autre chose plus tard. Le nom du champs sera qqch comme "forked_from", ou "predecessor" (à débattre).
Dans le futur, un process de relance partielle aura un état initial, potentiellement dans processlog entry initial. On ne copiera probablement pas l'ensemble des processlog menant à cet état. L'idée est qu'on puisse clairement identifier la partie de l'exécution propre au process de relance, et pour avoir l'historique on peut toujours aller chercher le process d'origine.
A noter qu'un process relancé ne pourra être purgé si un process de relance le référençant est encore présent.
La relance d'un process devra potentiellement être référencée dans le postmortem status du process.