Development #76047
Discussion: mettre en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration
0%
Description
Actuellement toutes les deux heures il y a parcourt de la totalité des demandes/fiches pour les workflows qui ont des actions globales déclenchés par des expirations. Pour la totalité d'entre elles je suppute que la date de réveil aurait pu être calculé lors du dernier {form/card}data.store()
. Je confirmerai ça par un script voir les expressions présentes en production.
Le calcul de cette date de réveil pourrait être fait lors du store et cette date être stockée dans une colonne "next_wakeup", colonne qui pourra utilement être répliquée dans wcs_all_forms (et un wcs_all_cards qui pourrait être créé à l'occasion). Ainsi on pourrait avoir un job de cron réveillé bien plus souvent mais qui aurait juste à une requête sur wcs_all_forms qui retournerait une liste des Formdef.id et des formdata.id pour lesquels il faut exécuter une action globale.
Deux bénéfices :- beaucoup moins de travail inutile
- des délais effectifs d'expiration qui peuvent être raccourcis
- plus de sécurité sur l'exécution des actions sur expiration
Ce dernier point pourrait aussi bénéficier aux sauts classiques sur expiration si on adopte le même fonctionnement au passage, en testant la condition au moment du formdata.store()
et si la condition est bonne on calcule la date form_last_update_time + jump.timeout
, il faudrait vérifier la aussi la plupart des conditions, je suppose d'avance que celles contenant un appel webservice.*
devront être traités séparément.
- les conditions sur des sources externes, data_sources.* et webservice.* je dirai bien de les interdire dans les triggers, actuellement je n'en vois pas dans les triggers, pour les sauts classiques il faudrait juste considérer la condition comme toujours vrai lors du calcul du prochain réveil mais en prenant comme minimum la durée minimale de 20 minutes,
- les conditions qui dépendent d'une variable
form_option_*
il y en a dans les triggers il faudrait les détecter et sur une modification d'option recalculer les dates de réveil concernées (dans ces cas là c'est presque toujours statique, i.e. ça ne dépend pas des données du formdata) - les conditions qui dépendent d'autres fiches/demandes via
forms|objects
oucards|objects
, je n'en vois aucune dans les triggers, je les interdirait, et pour les sauts classiques il faudrait les considérer comme toujours vrais.
Demandes liées
Historique
Mis à jour par Benjamin Dauvergne il y a environ un an
- Lié à Development #44336: permettre un délai court aux actions globales ajouté
Mis à jour par Benjamin Dauvergne il y a environ un an
- Sujet changé de Mette en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration à Discussion: mettre en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration
Mis à jour par Frédéric Péters il y a environ un an
- Statut changé de Nouveau à Fermé
Déjà discuté il y a quelques mois, d'autres priorités, et un ticket illisible de plus ne changera rien.
Mis à jour par Frédéric Péters il y a environ un an
- Lié à Development #71430: Saut automatique : possibilité de préciser une date ajouté
Mis à jour par Frédéric Péters il y a environ un an
Bon en fait #71430 évoquait ça mais ça n'était pas le sujet principal, et la partie qui a mené ce ticket n'y avait pas vraiment été discutée.
Reste qu'il y a pour moi suffisamment d'autres priorités, et que je ne suis pas enthousiaste à complexifier quoique ce soit, ni même à tenter de déchiffrer les tableaux attachés à ce ticket.