[Majeur] Backoff stream remis à 1 s sur déconnexion « propre » : tempête de reconnexion possible, pas de jitter #86

Open
opened 2026-08-26 05:32:40 +00:00 by mat · 0 comments
Owner

Problème

stream.py:151-155 : _run_stream_once retourne normalement (sans exception) quand le serveur ferme proprement la connexion (la lib fait break sur connexion fermée) → backoff = 1.0 systématique.

Si le serveur refuse/ferme immédiatement les connexions (maintenance, rate-limit), le cycle devient « connecter → fermer → sleep 1 s » en boucle : ~1 connexion/s/site, pour toujours, sans jamais accumuler de backoff. Par ailleurs aucun jitter : multi-sites = reconnections simultanées (thundering herd).

Recommandation

  1. Ne remettre le backoff à 1 s que si la connexion a vécu plus qu'un seuil (ex. 60 s — mesurable avec monotonic() autour de _run_stream_once).
  2. Ajouter du jitter : random.uniform(0, backoff) sur le sleep.

Constaté lors de la review de code pré-v1.0 (v0.8.1).

## Problème `stream.py:151-155` : `_run_stream_once` retourne **normalement** (sans exception) quand le serveur ferme proprement la connexion (la lib fait `break` sur connexion fermée) → `backoff = 1.0` systématique. Si le serveur refuse/ferme immédiatement les connexions (maintenance, rate-limit), le cycle devient « connecter → fermer → sleep 1 s » en boucle : ~1 connexion/s/site, pour toujours, sans jamais accumuler de backoff. Par ailleurs aucun jitter : multi-sites = reconnections simultanées (thundering herd). ## Recommandation 1. Ne remettre le backoff à 1 s que si la connexion a vécu plus qu'un seuil (ex. 60 s — mesurable avec `monotonic()` autour de `_run_stream_once`). 2. Ajouter du jitter : `random.uniform(0, backoff)` sur le sleep. --- Constaté lors de la review de code pré-v1.0 (v0.8.1).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mat/homeassistant-comwatt#86
No description provided.