Projet

Général

Profil

Bug #40600

afterjob de masse, failed to allocate SSL context

Ajouté par Frédéric Péters il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
10 mars 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

afterjob (suite à action de masse) qui contient une action de notification, exécutée quantité de fois donc, et parfois cette erreur :

  type = '<class 'wcs.qommon.errors.ConnectionError'>', value = 'error in HTTP request to ...
(HTTPSConnectionPool(host='....', port=443): Max retries exceeded with url: /api/notification/add/.... (Caused by SSLError(SSLError('failed to allocate SSL context',),)))'

Fichiers

Révisions associées

Révision de68242a (diff)
Ajouté par Frédéric Péters il y a environ 4 ans

misc: add connection pooling and keep-alive (#40600)

Historique

#3

Mis à jour par Frédéric Péters il y a environ 4 ans

requests → urllib3 → ssl.py → _ssl.c → openssl → SSL_CTX_new mais différents cas d'erreurs dedans et on n'a pas l'information suffisamment détaillée, comme on n'a pas de soucis mémoire peut-être un soucis de thread/lock,

    ret->lock = CRYPTO_THREAD_lock_new();
    if (ret->lock == NULL) {
        SSLerr(SSL_F_SSL_CTX_NEW, ERR_R_MALLOC_FAILURE);
        OPENSSL_free(ret);
        return NULL;
    }

De là, patch qui s'éloigne du problème précis, qui ajoute connection pooling / keep alive. (la modif dans publisher.py n'est même pas vraiment utile je pense, je ne vois pas de problème particulier à partager le contexte SSL entre tenants, mais bon, c'est une ligne)

#4

Mis à jour par Thomas Noël il y a environ 4 ans

Comme le init_publish est appelé à chaque nouvelle requête, en fait on ne partage plus le contexte entre deux requêtes d'un même tenant, n'est-ce pas ? (Ça me va d'être ainsi conservateur, mais je pose quand même la question)

#5

Mis à jour par Frédéric Péters il y a environ 4 ans

on ne partage plus

On n'a jamais partagé, et on ne se met pas à le partager.

#6

Mis à jour par Thomas Noël il y a environ 4 ans

Frédéric Péters a écrit :

on ne partage plus

On n'a jamais partagé, et on ne se met pas à le partager.

Oui je voulais écrire : « on ne partage pas le contexte entre deux requêtes »

#7

Mis à jour par Frédéric Péters il y a environ 4 ans

Yep, on ne partage pas, on pourrait entre requêtes successives vers le même process, indépendamment du tenant, en ne mettant pas la ligne dans publisher.py, mais conservatisme etc.

#8

Mis à jour par Thomas Noël il y a environ 4 ans

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

Et donc, ok pour ce patch "conservateur"

(en fait à un moment je me suis dit que c'était intéressant d'avoir ça pour les webservices d'auto-complétion ou de géocodage, mais c'est donc pas l'objet ici, afterjob, etc).

#9

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit de68242a59c0c1ddb717808671186777dc3f5934
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Mar 10 11:11:55 2020 +0100

    misc: add connection pooling and keep-alive (#40600)
#10

Mis à jour par Frédéric Péters il y a environ 4 ans

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

Formats disponibles : Atom PDF