Improve OVS/OVN stop robustness for restacking

The stop_ovn function stops services but leaves behind runtime files
and stale configuration that can cause restacking failures. This change
improves robustness by:

- Making _stop_process check is-active in addition to is-enabled, so
  services are stopped even if they are running but not enabled.

- Clearing OVS external-ids before stopping to prevent stale config
  (ovn-remote, ovn-bridge, etc.) from persisting across restacks.

- Cleaning up runtime files (*.sock, *.pid, *.ctl) in both OVS_RUNDIR
  and OVN_RUNDIR after stopping services, as stale sockets can prevent
  ovsdb-server from binding on restart.

- Removing database lock files (.*.db.~lock~) which can block database
  access if services crash or stop uncleanly.

These changes allow stack.sh to run successfully after unstack.sh
without requiring a full clean.sh.

Generated-By: Cursor claude-opus-4.5
Change-Id: I8736f19a8892200948ee74854f99fd99eed5110b
Signed-off-by: Sean Mooney <work@seanmooney.info>
This commit is contained in:
Sean Mooney
2026-01-09 19:41:29 +00:00
parent 5e21304153
commit 20ed3c5f11

View File

@@ -798,8 +798,11 @@ function _stop_ovs_dp {
function _stop_process {
local service=$1
echo "Stopping process $service"
if $SYSTEMCTL is-enabled $service; then
# Stop if running, regardless of enabled state
if $SYSTEMCTL is-active $service; then
$SYSTEMCTL stop $service
fi
if $SYSTEMCTL is-enabled $service; then
$SYSTEMCTL disable $service
fi
}
@@ -834,10 +837,22 @@ function stop_ovn {
_stop_process "devstack@ovs-vtep.service"
fi
# Clear OVS external-ids before stopping to prevent stale config on restack
if sudo ovs-vsctl show &>/dev/null; then
sudo ovs-vsctl --if-exists clear open_vswitch . external-ids
fi
_stop_process "$OVS_VSWITCHD_SERVICE"
_stop_process "$OVSDB_SERVER_SERVICE"
_stop_ovs_dp
# Clean up runtime files that can prevent restart
sudo rm -f $OVS_RUNDIR/*.sock $OVS_RUNDIR/*.pid $OVS_RUNDIR/*.ctl
sudo rm -f $OVN_RUNDIR/*.sock $OVN_RUNDIR/*.pid $OVN_RUNDIR/*.ctl
# Clean up database lock files
sudo rm -f $OVS_DATADIR/.*.db.~lock~
sudo rm -f $OVN_DATADIR/.*.db.~lock~
}
function _cleanup {