netns: снос топологии с повторами на случай ленивого umount (#56)

В контейнере `ip netns delete` иногда возвращает успех, но namespace остаётся
в `ip netns list` — из-за этого run.sh отдавал код 4 на зелёных тестах (флак
1 из 3). Теперь удаление повторяется до 5 раз с проверкой ns_exists.

Refs #21, Refs #56
This commit is contained in:
2026-10-28 21:35:27 +03:00
parent 156d791020
commit 63e75e4b7f
+11 -1
View File
@@ -28,8 +28,18 @@ topology_down() {
local quiet="${1:-}" local quiet="${1:-}"
[ "$quiet" = quiet ] || log "удаляю топологию" [ "$quiet" = quiet ] || log "удаляю топологию"
# netns удаляем первыми: вместе с ними уходят veth-концы и процессы внутри. # netns удаляем первыми: вместе с ними уходят veth-концы и процессы внутри.
# `ip netns delete` в контейнере иногда возвращает успех, но namespace
# остаётся виден в `ip netns list` (issue #56) — поэтому повторяем удаление.
local ns attempt
for ns in "$AWG_NS_CLIENT" "$AWG_NS_GW" "$AWG_NS_UPLINK"; do for ns in "$AWG_NS_CLIENT" "$AWG_NS_GW" "$AWG_NS_UPLINK"; do
if ns_exists "$ns"; then ip netns del "$ns" 2>/dev/null || true; fi for attempt in 1 2 3 4 5; do
if ! ns_exists "$ns"; then break; fi
ip netns delete "$ns" 2>/dev/null || true
sleep 0.2
done
if ns_exists "$ns"; then
warn "netns ${ns} не удалился за 5 попыток"
fi
done done
# страховка на случай, если veth остался в корневом netns # страховка на случай, если veth остался в корневом netns
for ifc in "$AWG_VETH_CLIENT" "$AWG_VETH_GW_LAN" "$AWG_VETH_GW_WAN" "$AWG_VETH_UPLINK"; do for ifc in "$AWG_VETH_CLIENT" "$AWG_VETH_GW_LAN" "$AWG_VETH_GW_WAN" "$AWG_VETH_UPLINK"; do