102901 El destino aceptó la conexión y se colgó
DESTINO_NO_CONTESTO_A_TIEMPO
Clase común a toda la flota (familia «dependencia»): Dependencia no contestó a tiempo. El fallo está en algo de lo que depende atalaya, no en la petición.
Qué ha pasado
Hablamos con el destino y no respondió dentro de nuestro plazo. Es DISTINTO de que esté caído: el puerto abre y el handshake completa, así que desde fuera parece vivo. Para el reintento se trata como incierto, porque la petición PUDO llegar.
Cómo se soluciona
Ajustar el plazo del driver si el destino es legítimamente lento (NOTIFY_MATRIX_TIMEOUT_S, NOTIFY_HTTP_TIMEOUT_S). Si se repite, mirar el servicio del destino, no el nuestro.
Qué hacer mientras tanto
El backoff con jitter (migración 0019) espacia los reintentos para no martillear un destino que ya va lento.
Ya costó tiempo
2026-08-23. Timeouts intermitentes de matrix.org (>20 s) agotaban los reintentos y tiraban avisos a la DLQ; entre ellos el aviso del despliegue de la v0.2.12. Se corrigió subiendo el read timeout del driver a 30 s (MR !95) y quedó VALIDADO en producción con datos: 8 agotados por timeout antes del despliegue, 0 después.
Dónde se lanza
motor/clasificar.py:clase_de_fallo → 'timeout' → CODIGO_POR_CLASE → motor/cola.py:cerrar_entrega, que lo escribe en entregas.codigo (migración 0023) y sale por GET /envios/{id}/entregas
Cómo se lee el código
1- origen: Fortiseg
02- servicio: atalaya
901- clase común a toda la flota: Dependencia no contestó a tiempo