Projet

Général

Profil

Development #55571

Provisionning HTTP : utiliser le spooler uwsgi

Ajouté par Emmanuel Cazenave il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Comme dans #55092.


Fichiers


Demandes liées

Lié à Hobo - Development #55092: Provisionning des roles de des utilisateurs : utiliser les spooler uwsgiFermé22 juin 2021

Actions
Lié à Hobo - Development #56920: ajouter un paramètre pour garantir la synchronicité dans /api/provisionFermé14 septembre 2021

Actions

Révisions associées

Révision b26cf2d1 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 2 ans

misc: use uwsgi spooler when provisionning through HTTP (#55571)

Historique

#1

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é
#2

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
#3

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.

#4

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.

#5

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.

#6

Mis à jour par Emmanuel Cazenave il y a plus de 2 ans

Merci.

Encore plus simple que mon patch initial en fait.

#7

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

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)
#9

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
#10

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é

Formats disponibles : Atom PDF