Projet

Général

Profil

Development #59783

misc: pouvoir définir une politique de réessai pour les requêtes HTTP

Ajouté par Benjamin Dauvergne 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:
16 décembre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

À appliquer au connecteur BAN en premier lieu.


Fichiers

0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch (2,62 ko) 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch Benjamin Dauvergne, 16 décembre 2021 12:05
0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch (838 octets) 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch Benjamin Dauvergne, 16 décembre 2021 12:05
0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch (3,03 ko) 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch Benjamin Dauvergne, 16 décembre 2021 12:05
0004-base_adresse-set-http_max_retries-59783.patch (836 octets) 0004-base_adresse-set-http_max_retries-59783.patch Benjamin Dauvergne, 16 décembre 2021 12:05
0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch (2,62 ko) 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch Benjamin Dauvergne, 20 décembre 2021 11:51
0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch (838 octets) 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch Benjamin Dauvergne, 20 décembre 2021 11:51
0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch (3,43 ko) 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch Benjamin Dauvergne, 20 décembre 2021 11:51
0004-base_adresse-set-http_max_retries-59783.patch (836 octets) 0004-base_adresse-set-http_max_retries-59783.patch Benjamin Dauvergne, 20 décembre 2021 11:51
0005-utils-allow-global-setting-of-http_max_retries-59783.patch (2,54 ko) 0005-utils-allow-global-setting-of-http_max_retries-59783.patch Benjamin Dauvergne, 20 décembre 2021 12:36
0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch (2,62 ko) 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch Benjamin Dauvergne, 20 décembre 2021 12:36
0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch (838 octets) 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch Benjamin Dauvergne, 20 décembre 2021 12:36
0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch (3,43 ko) 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch Benjamin Dauvergne, 20 décembre 2021 12:36
0004-base_adresse-set-http_max_retries-59783.patch (836 octets) 0004-base_adresse-set-http_max_retries-59783.patch Benjamin Dauvergne, 20 décembre 2021 12:36
0005-utils-allow-global-setting-of-http_max_retries-59783.patch (2,58 ko) 0005-utils-allow-global-setting-of-http_max_retries-59783.patch Benjamin Dauvergne, 20 décembre 2021 16:07
0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch (2,63 ko) 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch Benjamin Dauvergne, 20 décembre 2021 16:07
0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch (842 octets) 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch Benjamin Dauvergne, 20 décembre 2021 16:07
0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch (3,46 ko) 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch Benjamin Dauvergne, 20 décembre 2021 16:07
0004-base_adresse-set-http_max_retries-59783.patch (844 octets) 0004-base_adresse-set-http_max_retries-59783.patch Benjamin Dauvergne, 20 décembre 2021 16:07
0002-base_adresse-set-requests_timeout-attribute-to-1-sec.patch (848 octets) 0002-base_adresse-set-requests_timeout-attribute-to-1-sec.patch Benjamin Dauvergne, 20 décembre 2021 16:36
0005-utils-add-setting-REQUESTS_MAX_RETRIES-59783.patch (3,24 ko) 0005-utils-add-setting-REQUESTS_MAX_RETRIES-59783.patch Benjamin Dauvergne, 20 décembre 2021 16:36
0004-base_adresse-set-requests_max_retries-attribute-5978.patch (858 octets) 0004-base_adresse-set-requests_max_retries-attribute-5978.patch Benjamin Dauvergne, 20 décembre 2021 16:36
0001-utils-handle-new-requests_timeout-attribute-on-BaseR.patch (2,63 ko) 0001-utils-handle-new-requests_timeout-attribute-on-BaseR.patch Benjamin Dauvergne, 20 décembre 2021 16:36
0003-utils-handle-new-requests_max_retries-attribute-on-B.patch (3,44 ko) 0003-utils-handle-new-requests_max_retries-attribute-on-B.patch Benjamin Dauvergne, 20 décembre 2021 16:36

Demandes liées

Lié à Passerelle - Development #49764: options pour réessayer automatiquement les requêtesFermé28 décembre 2020

Actions

Révisions associées

Révision 185bd100 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

utils: handle new requests_timeout attribute on BaseResource (#59783)

Révision e0403bf2 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

base_adresse: set requests_timeout attribute to 1 second (#59783)

Révision 425ad9d7 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

utils: handle new requests_max_retries attribute on BaseResource (#59783)

Révision 525a6647 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

base_adresse: set requests_max_retries attribute (#59783)

Révision 1911aee5 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 2 ans

utils: add setting REQUESTS_MAX_RETRIES (#59783)

Historique

#2

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours
#4

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

L'idée est de faire disparaître les trop nombreuses erreurs intermittentes de réseau, par principe ça ne s'applique qu'aux verbes idempotents (donc pas POST) et uniquement pour un connecteur qui en fait la demande. Une configuration comme :

+        'total': 5,
+        'backoff_factor': 1,

Va produire au pire 6 essais espacés de 0s, puis 1s, puis 2s, puis 4s, puis 8s; c'est à combiner avec le timeout (ici on mettrait un timeout court de quelques secondes), ici pour la BAN j'ai mis 1s, elle répond en général bien plus vite.

PS: erreurs BAN
https://sentry.entrouvert.org/entrouvert/publik/?query=is%3Aunresolved+api-adresse
https://sentry.entrouvert.org/entrouvert/gplexpert/?query=is%3Aunresolved+api-adresse (beaucoup plus depuis GPL expert, je ne me l'explique pas, est-ce l'usage qui y est plus important ou autre ?)
https://sentry.entrouvert.org/entrouvert/nfrance/?query=is%3Aunresolved+api-adresse (idem toulouse)

#6

Mis à jour par Thomas Noël il y a plus de 2 ans

Ca n'a pas vraiment d'utilité pour la BAN : quand elle est en panne c'est chaque nuit pendant 5 minutes... ces retentatives n'y changeront pas grand chose.

Mais bon bref :
  • 0001 et suivants : nommer l'attribut « requests_timeout » (au lieu de « http_timeout »). Mais je peux écouter un avis contraire.
  • 0002 : une seule seconde, ça me semblait un peu chaud ballon, mais en fait il s'agit d'un timeout sur le temps de connexion, puis sur le temps de non-réponse, donc ça doit passer.
  • 0003 : plutôt « requests_max_retries » que « http_max_retries » ?
  • 0005 : le paramétrage global ne me semble pas un truc pertinent, évitons le ? Ca risque juste de faire déraper les requêtes qui vont être tentées 3 fois et faire dépasser au final la minute de réponse globale.
#7

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours

Thomas Noël a écrit :

Ca n'a pas vraiment d'utilité pour la BAN : quand elle est en panne c'est chaque nuit pendant 5 minutes... ces retentatives n'y changeront pas grand chose.

Je vois des erreurs toute la journée pour ma part, tu peux suivre les liens que j'ai posté pour le constater (cliquer sur le ticket, puis évènements, ex.: https://sentry.entrouvert.org/entrouvert/gplexpert/issues/51322/events/?query=is%3Aunresolved%20api-adresse ) mais j'avoue que perso c'est vraiment le setting global qui est mon objectif pour Toulouse et le CD06, au moins.

Mais bon bref :

Oui voilà.

  • 0001 et suivants : nommer l'attribut « requests_timeout » (au lieu de « http_timeout »). Mais je peux écouter un avis contraire.

D'ac.

  • 0002 : une seule seconde, ça me semblait un peu chaud ballon, mais en fait il s'agit d'un timeout sur le temps de connexion, puis sur le temps de non-réponse, donc ça doit passer.

Oui, c'est un idle_timeout général.

  • 0003 : plutôt « requests_max_retries » que « http_max_retries » ?

Ok.

  • 0005 : le paramétrage global ne me semble pas un truc pertinent, évitons le ? Ca risque juste de faire déraper les requêtes qui vont être tentées 3 fois et faire dépasser au final la minute de réponse globale.

Je compte bien mettre un truc à 5/10 s puis 2 essaies à Toulouse et au CD06, les trucs plus longs ne fonctionnent jamais en fait. Mais je reconnais que comme on ne log pas les temps des requêtes réussies je n'ai pas tellement d'arguments dans ce sens, juste un feeling (et surtout on parle juste de GET là, ça doit jamais prendre 25 secondes).

#9

Mis à jour par Thomas Noël il y a plus de 2 ans

Ok pour 0005. Pour auto-documenter le truc, je préférerais qu'on pose un dans le settings.py quelque chose comme :

# Retry all requests
# See: https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html#urllib3.util.Retry
# Example:
# REQUESTS_MAX_RETRIES = {
#     'total': 3,
#     'read': None,
#     'backoff_factor': 0.1,
# }
REQUESTS_MAX_RETRIES = {}

ce qui te permettra d'écrire juste « requests_max_retries = dict(settings.REQUESTS_MAX_RETRIES) »

#11

Mis à jour par Thomas Noël il y a plus de 2 ans

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

Let's go.

#12

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 1911aee511a0fabfce252428de46fcc94630bde5
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Mon Dec 20 12:36:07 2021 +0100

    utils: add setting REQUESTS_MAX_RETRIES (#59783)

commit 525a66476b70fcc5d44037fd15327c7ffeb06fbc
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Dec 16 12:03:18 2021 +0100

    base_adresse: set requests_max_retries attribute (#59783)

commit 425ad9d7d6d5fb479b51a3c90792b0f445ed7e91
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Dec 16 12:03:41 2021 +0100

    utils: handle new requests_max_retries attribute on BaseResource (#59783)

commit e0403bf274468cda81593a6248d3522f61c3a1d7
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Dec 16 11:31:58 2021 +0100

    base_adresse: set requests_timeout attribute to 1 second (#59783)

commit 185bd10081fa901a7ac35c813deac205aea9d8ef
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Dec 16 11:24:27 2021 +0100

    utils: handle new requests_timeout attribute on BaseResource (#59783)
#14

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

  • Sujet changé de misc: pouvoir définir une politique de réessaie pour les requêtes HTTP à misc: pouvoir définir une politique de réessai pour les requêtes HTTP
#15

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

Mis à jour par Transition automatique il y a environ 2 ans

Automatic expiration

#17

Mis à jour par Frédéric Péters il y a environ un an

  • Lié à Development #49764: options pour réessayer automatiquement les requêtes ajouté

Formats disponibles : Atom PDF