Projet

Général

Profil

Development #32685

multitenant: les classes Thread surchargées doivent être chargées le plus tôt possible

Ajouté par Benjamin Dauvergne il y a presque 5 ans. Mis à jour il y a presque 5 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour éviter à d'autres librairies (exemple, paramiko) d'utiliser les deux il faut charger celles-ci le plus tôt possible, voir #32683.


Fichiers


Demandes liées

Lié à Passerelle - Support #32683: sftp: incompatibilité entre paramiko et la surcharge de threading par hoboRejeté29 avril 2019

Actions

Révisions associées

Révision 01a24f29 (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

multitenant: load multitenant thread classes early on (#32685)

Also do not keep a tenant around if current database wrapper is not
multitenant aware.

Historique

#1

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

  • Lié à Support #32683: sftp: incompatibilité entre paramiko et la surcharge de threading par hobo ajouté
#2

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

Ça devrait faire l'affaire.

#3

Mis à jour par Christophe Siraut il y a presque 5 ans

Pour éviter à d'autres librairies (exemple, paramiko) d'utiliser les deux il faut charger celles-ci le plus tôt possible

les deux quoi? Le code déplacé est identique, j'imagine que l'import en début de apps.py fait la différence.

#4

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

Christophe Siraut a écrit :

Pour éviter à d'autres librairies (exemple, paramiko) d'utiliser les deux il faut charger celles-ci le plus tôt possible

les deux quoi? Le code déplacé est identique, j'imagine que l'import en début de apps.py fait la différence.

Pardon d'utiliser les deux implémentations des threads, le fait est que paramiko est mal écrit, il fait directement appel à Thread.init() au lieu d'utiliser super() et ça casse tout (il appelle TenantAwareThread.__init__() alors que sa classe n'en hérite pas).

À terme il faudrait arrêter avec le monkeypatching et utiliser directement TenantAwareThread quand c'est nécessaire.

#6

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

Maintenant il faut prendre en compte le fait de ne pas tourner dans un environnement multitenant (entre les tests).

#7

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

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

On se place au début des chargements (quand hobo.multitenant est chargé).
‎comme passerelle.utils.sftp ne sera appelé que par des applications passerelle bien après, ça ira :

hobo/multitenant/_init__.py:_

...
threads.install_tenant_aware_threads()

surcharge /usr/lib/python2.7/threading.py.

Difficile à tester car dans un test on est forcément après AppConfig.ready().
Là on essaye de se placer avant AppConfig.ready() :
avant le chargement de l'ensemble des applications Django, sachant que paramiko est chargé à ce moment.

Le code n'est pas exactement pareil à cause des tests de hobo qui ne tournent pas en multitenant : si le driver de DB n'est pas celui de django-tenant-schemas connection.get_tenant() n'existe pas.
Or en déplaçant l'initialisation plus tôt on constate qu'un truc quelque part charge hobo.multitenant.

Merci pour les explications. Je valide.

#8

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 01a24f29a59322c9f1b83e36cdf5f5e20a156e9c
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon Apr 29 18:35:57 2019 +0200

    multitenant: load multitenant thread classes early on (#32685)

    Also do not keep a tenant around if current database wrapper is not
    multitenant aware.
#9

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

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

Formats disponibles : Atom PDF