Development #59783
misc: pouvoir définir une politique de réessai pour les requêtes HTTP
0%
Description
À appliquer au connecteur BAN en premier lieu.
Fichiers
Demandes liées
Révisions associées
base_adresse: set requests_timeout attribute to 1 second (#59783)
utils: handle new requests_max_retries attribute on BaseResource (#59783)
base_adresse: set requests_max_retries attribute (#59783)
utils: add setting REQUESTS_MAX_RETRIES (#59783)
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch ajouté
- Fichier 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch ajouté
- Fichier 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch ajouté
- Fichier 0004-base_adresse-set-http_max_retries-59783.patch 0004-base_adresse-set-http_max_retries-59783.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch ajouté
- Fichier 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch ajouté
- Fichier 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch ajouté
- Fichier 0004-base_adresse-set-http_max_retries-59783.patch 0004-base_adresse-set-http_max_retries-59783.patch ajouté
- Statut changé de En cours à Solution proposée
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)
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0005-utils-allow-global-setting-of-http_max_retries-59783.patch 0005-utils-allow-global-setting-of-http_max_retries-59783.patch ajouté
- Fichier 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch ajouté
- Fichier 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch ajouté
- Fichier 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch ajouté
- Fichier 0004-base_adresse-set-http_max_retries-59783.patch 0004-base_adresse-set-http_max_retries-59783.patch ajouté
Et un setting global pour Toulouse par exemple, où tout déconne.
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.
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).
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0005-utils-allow-global-setting-of-http_max_retries-59783.patch 0005-utils-allow-global-setting-of-http_max_retries-59783.patch ajouté
- Fichier 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch 0001-utils-allow-an-http_timeout-parameter-on-BaseResourc.patch ajouté
- Fichier 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch 0002-base_adresse-set-default-HTTP-timeout-to-1-second-59.patch ajouté
- Fichier 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch 0003-utils-allow-an-http_max_retries-parameter-on-BaseRes.patch ajouté
- Fichier 0004-base_adresse-set-http_max_retries-59783.patch 0004-base_adresse-set-http_max_retries-59783.patch ajouté
- Statut changé de En cours à Solution proposée
Voilà.
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) »
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Fichier 0002-base_adresse-set-requests_timeout-attribute-to-1-sec.patch 0002-base_adresse-set-requests_timeout-attribute-to-1-sec.patch ajouté
- Fichier 0005-utils-add-setting-REQUESTS_MAX_RETRIES-59783.patch 0005-utils-add-setting-REQUESTS_MAX_RETRIES-59783.patch ajouté
- Fichier 0004-base_adresse-set-requests_max_retries-attribute-5978.patch 0004-base_adresse-set-requests_max_retries-attribute-5978.patch ajouté
- Fichier 0001-utils-handle-new-requests_timeout-attribute-on-BaseR.patch 0001-utils-handle-new-requests_timeout-attribute-on-BaseR.patch ajouté
- Fichier 0003-utils-handle-new-requests_max_retries-attribute-on-B.patch 0003-utils-handle-new-requests_max_retries-attribute-on-B.patch ajouté
Ok.
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.
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)
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
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 Frédéric Péters il y a environ un an
- Lié à Development #49764: options pour réessayer automatiquement les requêtes ajouté
utils: handle new requests_timeout attribute on BaseResource (#59783)