Projet

Général

Profil

Bug #55840

Pouvoir tenter un envoi synchrone avant de lancer le job

Ajouté par Nicolas Roche il y a presque 3 ans. Mis à jour il y a plus de 2 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
26 juillet 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

L'idée étant qu'on fait du synchrone si tout va bien, et sinon on continue en asynchrone
(ce serait bien que ce soit une option de add_job).

Ébauche de patch ici : https://dev.entrouvert.org/issues/55230?issue_count=219&issue_position=11&next_issue_id=54663&prev_issue_id=55284#note-27


Fichiers


Demandes liées

Lié à Passerelle - Development #55230: toulouse_smart: endpoint POST InterventionFermé28 juin 2021

Actions

Historique

#1

Mis à jour par Nicolas Roche il y a presque 3 ans

#2

Mis à jour par Nicolas Roche il y a presque 3 ans

#3

Mis à jour par Thomas Noël il y a presque 3 ans

On peut pas profiter du transaction.on_commit qui est déjà là, et faire juste :

- transaction.on_commit(lambda: job.run(spool=True))
+ transaction.on_commit(lambda: job.run(spool=not try_now))
#4

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Thomas Noël a écrit :

On peut pas profiter du transaction.on_commit qui est déjà là, et faire juste :

[...]

Si on est vraiment dans une transaction ça ne va pas faire ce qu'on espère, c'est à dire lancer le job immédiatement histoire d'avoir son résultat dans job.status, on aura systématiquement job.status == 'registered' et rien d'autre.

#5

Mis à jour par Thomas Noël il y a presque 3 ans

Ok.

Maintenant pourquoi un "except SkipJob", vu que c'est déjà pris en charge dans le run ?

Aussi, si le try_now a réussi (job.status == 'completed'), je serais pour ne pas continuer (ne pas faire le transaction.on_commit(lambda: job.run(spool=True))) et juste faire un return job.

Autrement dit je pense à :

if try_now:
    job.run(spool=False)
    if job.status == 'completed':
        return job

#6

Mis à jour par Benjamin Dauvergne il y a presque 3 ans

Thomas Noël a écrit :

Autrement dit je pense à :
[...]

Si tu veux mais il faut surtout avoir conscience que dans le spooler ou dans le job CRON, on peut avoir un timeout aussi long qu'on veut, c'est pour ça qu'on s'en sert, mais lors de l'appel synchrone il faut faire attention voir forcer un timeout court ou plus court; tout l'intérêt c'est d'avoir une réponse quasi immédiate quand ça marche, sinon de se reposer sur une exécution asynchrone sans trop de délais.

Ça c'est pour l'aspect timeout.

Coté transactionnel, quand on utilise try_now il faut éviter d'être dans une transaction ou bien s'assurer que ce qu'on fait dans le job est transactionnel, i.e. peut-être rejoué sans souci si la transaction autour échoue.

#7

Mis à jour par Thomas Noël il y a presque 3 ans

Benjamin Dauvergne a écrit :

Thomas Noël a écrit :

Autrement dit je pense à :
[...]

Si tu veux mais il faut surtout avoir conscience que dans le spooler ou dans le job CRON, on peut avoir un timeout aussi long qu'on veut, c'est pour ça qu'on s'en sert, mais lors de l'appel synchrone il faut faire attention voir forcer un timeout court ou plus court; tout l'intérêt c'est d'avoir une réponse quasi immédiate quand ça marche, sinon de se reposer sur une exécution asynchrone sans trop de délais.

Ça c'est pour l'aspect timeout.

Coté transactionnel, quand on utilise try_now il faut éviter d'être dans une transaction ou bien s'assurer que ce qu'on fait dans le job est transactionnel, i.e. peut-être rejoué sans souci si la transaction autour échoue.

Parfaitement d'accord avec tout ça. L'idée du try_now n'est pas de moi :)

Pour tout dire au départ j'étais contre l'idée présentée dans ce ticket. Mais il semble que ça soit utile pour SMART ? Si ce n'est pas le cas, je préfère ne pas avoir d'implémentation de cette affaire qui peut donner de faux espoirs.

Quand le besoin de "tenter d'abord et passer en job sinon", je préfèrerais que l'appel synchrone soit fait directement par l'appelant avant de basculer en job en cas de pépin (timeout rapide ou autre).

#8

Mis à jour par Frédéric Péters il y a presque 3 ans

Pour info pareil pas fan de l'idée, surtout parce que ça va amener des workflows qui vont être faits en comptant sur les infos d'un résultat immédiat alors que celui-ci ne sera pas garanti.

#9

Mis à jour par Nicolas Roche il y a plus de 2 ans

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

Je rejette.
A la base c'est parti d'un faux problème qui était de retrouver les erreurs synchrones/asynchrones au même endroit.
En fait il suffit juste de les recopier.
https://dev.entrouvert.org/issues/55230#note-26

Formats disponibles : Atom PDF