Окружение
- Панель:
remnawave/backend:latest, версия 3.3.2 - Нода:
remnawave/node:latest, 3.3.2 - PostgreSQL 18.3, Valkey 9.0.3, nginx 1.28
Что происходит
Нода, которая никогда не поднималась (DNS её адреса не резолвится, статус в панели — красный, трафик 0 B, версия не определена), не удаляется ни из UI, ни через API.
Шаги воспроизведения
- Добавить ноду с заведомо несуществующим адресом, например
test.example.host:2222. - Нажать «Удалить» в карточке ноды.
Ожидается
Нода удаляется, health check по ней прекращается.
По факту
- Браузер получает
HTTP 204— по OpenAPI это успех ("204": { "description": "Operation successful, no content returned" }). - Карточка после Ctrl+Shift+R остаётся на месте.
- В логах панели в момент запроса нет ни одной записи — ни об удалении, ни об ошибке.
- Строка в БД остаётся:
docker exec -it remnawave-db psql -U postgres -d postgres -c "select uuid, name, address, is_disabled from nodes;"
uuid | name | address | is_disabled
--------------------------------------+-----------+-------------------+-------------
4190a099-...-f1b7eefae0d1 | Singapore | singa.example.host| f
- Health check продолжает крутиться каждые 10 секунд:
WARN [NodeHealthCheckQueueProcessor] Node 4190a099-...-f1b7eefae0d1, singa.example.host:2222 – health check attempt 1 of 2, message: "getaddrinfo ENOTFOUND singa.example.host"
WARN [NodeHealthCheckQueueProcessor] Node 4190a099-...-f1b7eefae0d1, singa.example.host:2222 – health check attempt 2 of 2, message: "getaddrinfo ENOTFOUND singa.example.host"
WARN [NodeHealthCheckQueueProcessor] Lost connection to Node 4190a099-...-f1b7eefae0d1, singa.example.host:2222, message: "getaddrinfo ENOTFOUND singa.example.host"
Что уже проверено
docker exec -it remnawave-db psql -U postgres -d postgres -c "SELECT conrelid::regclass AS child_table, conname, confdeltype FROM pg_constraint WHERE confrelid = 'nodes'::regclass;"
child_table | conname | confdeltype
----------------------------------+-------------------------------------------------+-------------
nodes_usage_history | nodes_usage_history_node_uuid_fkey | c
config_profile_inbounds_to_nodes | config_profile_inbounds_to_nodes_node_uuid_fkey | c
infra_billing_nodes | infra_billing_nodes_node_uuid_fkey | c
hosts_to_nodes | hosts_to_nodes_node_uuid_fkey | c
nodes_user_usage_history | nodes_user_usage_history_node_id_fkey | c
user_traffic | user_traffic_last_connected_node_uuid_fkey | n
node_meta | node_meta_node_id_fkey | c
torrent_blocker_reports | torrent_blocker_reports_node_id_fkey | c
Ручной DELETE FROM nodes WHERE uuid = '...' отрабатывает без ошибок и каскад срабатывает корректно, то есть на уровне схемы препятствий нет.
Обходной путь
docker exec remnawave-db pg_dump -U postgres postgres > backup.sql
docker exec -it remnawave-db psql -U postgres -d postgres -c "DELETE FROM nodes WHERE uuid = '<uuid>';"
docker exec -it remnawave-redis valkey-cli flushall
docker compose restart remnawave
Без flushall повторяющаяся задача health-check остаётся в очереди и продолжает логировать несуществующую ноду.