summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2025-12-17 12:43:03 +0200
committerNataliia Solomko <natalirs1985@gmail.com>2025-12-23 14:43:59 +0200
commit7997cc9f5b7446f5c0ca24e72dc4c35821fb1c69 (patch)
tree5e5af784a239fe450426f8c333232677be275960 /src
parentf4f19d33b5568fe14117b0c55fc4ccf423541730 (diff)
downloadvyos-1x-7997cc9f5b7446f5c0ca24e72dc4c35821fb1c69.tar.gz
vyos-1x-7997cc9f5b7446f5c0ca24e72dc4c35821fb1c69.zip
vpp: T8080: Fix handling of configuration system lock after vpp commit failure
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/vpp.py14
-rwxr-xr-xsrc/helpers/reset_section.py3
2 files changed, 13 insertions, 4 deletions
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index b5aac3f2e..4cbfab6bc 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -39,9 +39,11 @@ from vyos.utils.kernel import check_kmod
from vyos.utils.kernel import unload_kmod
from vyos.utils.kernel import list_loaded_modules
from vyos.utils.process import call
+from vyos.utils.process import is_systemd_service_active
from vyos.vpp import VPPControl
from vyos.vpp import control_host
+from vyos.vpp import VppNotRunningError
from vyos.vpp.config_deps import deps_xconnect_dict
from vyos.vpp.config_verify import (
verify_dev_driver,
@@ -771,10 +773,14 @@ def apply(config):
if 'settings' in config and 'interface' in config.get('settings'):
# connect to VPP
- # must be performed multiple attempts because API is not available
- # immediately after the service restart
try:
- vpp_control = VPPControl(attempts=20, interval=500)
+ # Bail out early if VPP service is not running
+ if not is_systemd_service_active(f'{service_name}.service'):
+ raise VppNotRunningError(
+ 'VPP service is not running or failed to start'
+ )
+
+ vpp_control = VPPControl()
# preconfigure LCP plugin
if 'ignore_kernel_routes' in config.get('settings', {}).get('lcp', {}):
@@ -877,7 +883,7 @@ def apply(config):
bitmask |= 1 << wid
vpp_control.set_nat_workers(bitmask)
- except (VPPIOError, VPPValueError) as e:
+ except (VPPIOError, VPPValueError, VppNotRunningError) as e:
# if cannot connect to VPP or an error occurred then
# we need to stop vpp service and initialize interfaces
call(f'systemctl stop {service_name}.service')
diff --git a/src/helpers/reset_section.py b/src/helpers/reset_section.py
index e57068d45..2d5695d6c 100755
--- a/src/helpers/reset_section.py
+++ b/src/helpers/reset_section.py
@@ -26,6 +26,7 @@ from vyos.configsession import ConfigSession
from vyos.config import Config
from vyos.configdiff import get_config_diff
from vyos.xml_ref import is_leaf
+from vyos.utils.commit import wait_for_commit_lock
CFG_GROUP = 'vyattacfg'
@@ -100,6 +101,8 @@ cfg_group = grp.getgrnam(CFG_GROUP)
os.setgid(cfg_group.gr_gid)
os.umask(0o002)
+wait_for_commit_lock()
+
shared = not bool(reload)
session = ConfigSession(session_id, shared=shared)