Volver a la wiki

CCIB 07-09-2026 — un deep discovery contra un equipo mudo bloqueó el websocket y tiró al Agente 3 minutos

Cuándo

07-09-2026, ~11:09 hora local. Primer PR de la sesión 313, con Edu in situ en el CCIB. El Agente local del portátil YogaEdu se desconecta del SaaS (close_code=1006) y no vuelve a estar operativo hasta 3 minutos después (11:12:25).

Síntomas visibles

Causa raíz

Tres defectos encadenados:

  1. Los comandos del SaaS se ejecutaban en línea dentro del bucle de lectura del websocket (terminal/agent/core/connector.py::_receive_loop). Un deep discovery contra un equipo mudo tardaba ~4 minutos en agotar los timeouts SNMP; mientras tanto, el bucle que debía seguir leyendo el socket (y respondiendo al latido) estaba bloqueado ejecutando ese comando.
  2. El deep discovery no tenía sondeo previo de alcance (terminal/agent/network/deep_discovery.py): recorría 8 categorías × ~20 OIDs con 5-11s de timeout cada uno aunque el equipo no respondiera a nada — de ahí los ~4 minutos por intento contra 172.25.10.201.
  3. La pestaña de detalle relanzaba el deep discovery cada 5 minutos sin importar si el intento anterior había fallado (static/js/pages/monitoring/MonitoringDetailPlumbing.js), así que el ciclo de 4 minutos de bloqueo se repetía indefinidamente mientras la pestaña estuviera abierta.

Con los tres defectos juntos: aiohttp llenaba su buffer de entrada (128 KB) con los comandos que se iban acumulando mientras el bucle de lectura estaba ocupado, pausaba la lectura TCP y con ella el PONG del latido (heartbeat=30, pong esperado en 15s) → el servidor declaraba la conexión muerta a las 11:09:10, mientras el Agente seguía procesando a ciegas lo que ya tenía en buffer hasta las 11:12:25.

Fix aplicado (commit 22604b895aa1e8deebfe3886a69f48d71b7990db, Agente 2.27.1, PR #522)

Lecciones

Preventivos futuros

Véase también

Subir