Development #55571
Provisionning HTTP : utiliser le spooler uwsgi
Début:
13 juillet 2021
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Emmanuel Cazenave il y a plus de 2 ans
- Lié à Development #55092: Provisionning des roles de des utilisateurs : utiliser les spooler uwsgi ajouté
Mis à jour par Emmanuel Cazenave il y a plus de 2 ans
C'est un peu galère, provision_role
et provision_user
ont besoin d'un objet publisher
, que pickle refuse de sérialiser :
TypeError: cannot serialize '_io.TextIOWrapper' object
Mis à jour par Frédéric Péters il y a plus de 2 ans
Je ne sais pas de quel code tu parles.
L'exécution asynchrone dans w.c.s. passe par l'ajout de (after)jobs; si tu utilises ça, tu n'auras pas de problèmes.
Mis à jour par Emmanuel Cazenave il y a plus de 2 ans
+++ b/wcs/ctl/hobo_notify.py @@ -24,10 +24,27 @@ from wcs.admin.settings import UserFieldsFormDef from wcs.qommon import force_str from wcs.qommon.misc import json_encode_helper +from ..qommon.afterjobs import AfterJob from ..qommon.ctl import Command from ..qommon.publisher import get_cfg +class ProvisionAfterJob(AfterJob): + def __init__(self, object_type, publisher, issuer, action, data, full, **kwargs): + super().__init__(**kwargs) + self.object_type = object_type + self.publisher = publisher + self.issuer = issuer + self.action = action + self.data = data + self.full = full + + def execute(self): + getattr(CmdHoboNotify, 'provision_' + self.object_type)( + self.publisher, self.issuer, self.action, self.data, full=self.full + ) + + class CmdHoboNotify(Command): name = 'hobo_notify' @@ -90,7 +107,15 @@ class CmdHoboNotify(Command): t = notification['objects']['@type'] # Now provision/deprovision - getattr(cls, 'provision_' + t)(publisher, issuer, action, notification['objects']['data'], full=full) + job = ProvisionAfterJob( + object_type=t, + publisher=publisher, + issuer=issuer, + action=action, + data=notification['objects']['data'], + full=full, + ) + job.run(spool=True)
Avec job.run
qui fait un self.store()
qui appelle pickle qui plante.
Mis à jour par Frédéric Péters il y a plus de 2 ans
Tu n'as pas à stocker le publisher, tu l'obtiens via get_publisher.
Mis à jour par Emmanuel Cazenave il y a plus de 2 ans
- Fichier 0001-misc-use-uwsgi-spooler-when-provisionning-through-HT.patch 0001-misc-use-uwsgi-spooler-when-provisionning-through-HT.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Merci.
Encore plus simple que mon patch initial en fait.
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Emmanuel Cazenave il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit b26cf2d1b660bf97c7873908d58344d88b337183 Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Tue Jul 13 18:45:47 2021 +0200 misc: use uwsgi spooler when provisionning through HTTP (#55571)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Lié à Development #56920: ajouter un paramètre pour garantir la synchronicité dans /api/provision ajouté
misc: use uwsgi spooler when provisionning through HTTP (#55571)