Projet

Général

Profil

Bug #32326

Cheminement trop profond dans un workflow si deux trigger ont le même nom

Ajouté par Emmanuel Cazenave il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
15 avril 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Dans https://demarches-venissieux-test.demarches.sitiv.fr/backoffice/workflows/24/, deux paiements successifs (une caution, un paiement normal), et donc nécessairement deux triggers 'paid'.

Une demande dans le statut 'Attente paiement caution', dont le statut suivant s'atteint par un trigger 'paid', puis deux statuts plus loin (par des sauts automatiques), un statut 'Attente paiement salle', sur lequel le deuxième trigger 'paid'.

Lorsque le trigger 'paid' est appelé, l'avancement des statuts ne s'arrête pas à 'Attente paiement salle', ça se poursuit au delà.


Fichiers

Révisions associées

Révision e3a4f928 (diff)
Ajouté par Thomas Noël il y a environ 5 ans

workflows: jump on trigger only once (#32326)

Historique

#1

Mis à jour par Thomas Noël il y a environ 5 ans

Analyse : c'est parce que l'appel à l'URL jump/trigger/xxx fait un «get_request().trigger_name = xxx» qui continue d'exister lors du parcours des must_jump des sauts suivants.

#2

Mis à jour par Thomas Noël il y a environ 5 ans

... et à vue de nez ce trigger_name ne sert en réalité à rien (on a déjà testé «component == item.trigger» quand on lance le jump_and_perform) ?

diff --git a/wcs/wf/jump.py b/wcs/wf/jump.py
index 476b1899..aad84119 100644
--- a/wcs/wf/jump.py
+++ b/wcs/wf/jump.py
@@ -79,7 +79,6 @@ class TriggerDirectory(Directory):
                     pass
                 elif not item.check_auth(self.formdata, user):
                     raise errors.AccessForbiddenError()
-                get_request().trigger_name = component
                 if item.must_jump(self.formdata):
                     workflow_data = None
                     if hasattr(get_request(), 'json'):
@@ -232,11 +231,6 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
             except RuntimeError:
                 must_jump = False

-        if self.trigger:
-            triggered = (hasattr(get_request(), 'trigger_name') and
-                         get_request().trigger_name == self.trigger)
-            must_jump = must_jump and triggered
-
         if self.timeout:
             timeout = int(self.compute(self.timeout))
             last = formdata.last_update_time
#3

Mis à jour par Thomas Noël il y a environ 5 ans

(je veux bien une très rapide review avant de me lancer dans l'écriture d'un test ; sachant que les tests actuels sur trigger semblent ok avec ce patch)

#4

Mis à jour par Thomas Noël il y a environ 5 ans

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Thomas Noël
#5

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

L'analyse m'a l'air ok, comme on fait déjà le jump_and_perform() dans le TriggerDirectory on n'a effectivement pas besoin de gérer les trigger dans perform().

#6

Mis à jour par Thomas Noël il y a environ 5 ans

Et en fait il faut garder le "if self.trigger" dans le must.jump pour que les sauts qui imposent un trigger ne soient pas exécutés. Voici donc une autre proposition de correction.

#7

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Solution proposée à Solution validée

En imaginant que personne n'a jamais profité de cette situation pour que s'enchainent automatiquement plusieurs sauts à partir d'un même appel trigger.

#8

Mis à jour par Thomas Noël il y a environ 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)

Frédéric Péters a écrit :

En imaginant que personne n'a jamais profité de cette situation pour que s'enchainent automatiquement plusieurs sauts à partir d'un même appel trigger.

La première personne que j'ai vu le faire a ouvert ce ticket :)

commit e3a4f9281700243675bc93749966c31a7c630b6a
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Mon Apr 15 17:24:47 2019 +0200

    workflows: jump on trigger only once (#32326)

#9

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#10

Mis à jour par Emmanuel Cazenave il y a environ 5 ans

Ça marche nickel, je remercie solennellement l'ensemble des intervenants.

Formats disponibles : Atom PDF