netns: удаление netns безусловно + проверка результата (#56)
Флак: ns_exists мог вернуть false до удаления, и namespace оставался жить. Теперь `ip netns delete` вызывается всегда, результат проверяется до 5 раз. Стабильность в контейнере: 5/5 прогонов rc=0 (было 4/5). Refs #21, Refs #56
This commit is contained in:
@@ -28,13 +28,14 @@ topology_down() {
|
|||||||
local quiet="${1:-}"
|
local quiet="${1:-}"
|
||||||
[ "$quiet" = quiet ] || log "удаляю топологию"
|
[ "$quiet" = quiet ] || log "удаляю топологию"
|
||||||
# netns удаляем первыми: вместе с ними уходят veth-концы и процессы внутри.
|
# netns удаляем первыми: вместе с ними уходят veth-концы и процессы внутри.
|
||||||
# `ip netns delete` в контейнере иногда возвращает успех, но namespace
|
# `ip netns delete` в контейнере иногда «теряется»: команда отработала, а
|
||||||
# остаётся виден в `ip netns list` (issue #56) — поэтому повторяем удаление.
|
# namespace остаётся в `ip netns list` (issue #56). Поэтому удаляем
|
||||||
|
# безусловно (операция идемпотентна) и до 5 раз проверяем результат.
|
||||||
local ns attempt
|
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
|
||||||
for attempt in 1 2 3 4 5; do
|
for attempt in 1 2 3 4 5; do
|
||||||
if ! ns_exists "$ns"; then break; fi
|
|
||||||
ip netns delete "$ns" 2>/dev/null || true
|
ip netns delete "$ns" 2>/dev/null || true
|
||||||
|
if ! ns_exists "$ns"; then break; fi
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
done
|
done
|
||||||
if ns_exists "$ns"; then
|
if ns_exists "$ns"; then
|
||||||
|
|||||||
Reference in New Issue
Block a user