Description détaillée |
|
Lorsque le traitement des taches est très long, il peu arriver qu'un second se déclenche en parallèle (ce qui n'est jamais souhaitable, avec ou sans cette évolution). Dans ce cas, cela génère des dossiers en doublons. En effet, actuellement, le traitement des tâches commence par lister toutes les tâches à traiter, puis les traitent. Or dans le cas d'un traitement qui dure, si un autre démarre il aura une partie de la liste des tâches à traiter en commun. Et ces tâches seront donc traitées deux fois, générant des dossiers en doublons.
L'évolution consiste à découper en deux l'étape d'amont du traitement:
- d'abord identifier les tâches à traiter (en ne listant que leurs IDs)
- puis pour chacune d'elle, avant de la traiter, récupérer ses infos, puis vérifier son état/statut pour s'assurer qu'elle n'ait pas été traitée par ailleurs
Après cette évolution, si deux traitements se déclenchent en parallèle et partagent une partie de leur liste de tâches à traiter, tant que les tâches sont des créations de dossiers cela n'aura pas d'impact, mais dès que l'un des deux traitement essaiera de traiter une tâche d'ajout de pièce à un dossier, alors si ce dossier est en cours de création (mais pas encore créé), alors ce traitement va produire une erreur sur cette tâche, et également sur toutes les tâches qui auraient une dépendance (création d'un dossier) non satisfaite.
En résumé, la parallélisation ne garantie pas l'ordre des tâches, alors que cet ordre est important d'un point de vue métier. C'est pour cela que la parallélisation n'est pas souhaitable.
L'évolution ici permet simplement d'éviter la création des dossiers en doublons dans le cas d'un "malencontreux" double traitement des tâches. |
|