Skip to content

[ipc] status ложно таймаутится во время массового reconnect — нужен lock-free read #92

Description

@enyonee

Симптом

tunnelvault --status сразу после открытия ноута (естественный момент проверки) отваливается по таймауту с ошибкой — выглядит как «демон умер», хотя он жив и просто ещё реконнектит тоннели после сна.

Причина

CLIENT_TIMEOUT = 10.0 (tv/ipc_protocol.py:16), но сервер на mutating-командах держит reconnect_lock (tv/ipc_server.py:256,286, timeout=30), а keepalive держит тот же lock весь реконнект целиком (tunnelvault.py). Реконнект нескольких мёртвых тоннелей серийный (for tc, pid in dead: reconnect_one), каждый — disconnect + keepalive_reconnect_pause + DNS-резолвы + connect() c ожиданием интерфейса (openvpn 30с / openconnect 20с). При 2-3 мёртвых после сна суммарно 60-90с+, всё это время lock занят → status клиент отваливается через 10с.

Направление фикса

Read-only команды (status, check) не должны ждать reconnect_lock — читать снапшот engine.results/engine.tunnels без захвата лока (снапшот уже делается в _cmd_status, tv/ipc_server.py:203-205, надо только убрать блокировку). Плюс поднять CLIENT_TIMEOUT до реалистичного худшего реконнекта хотя бы для mutating-команд.

UX-проблема (ложная тревога), не потеря данных.

Найдено адверсариальным ревью (sleep/wake ось), 2026-07-02.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions