diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2025-12-17 12:43:03 +0200 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2025-12-23 14:43:59 +0200 |
| commit | 7997cc9f5b7446f5c0ca24e72dc4c35821fb1c69 (patch) | |
| tree | 5e5af784a239fe450426f8c333232677be275960 /src | |
| parent | f4f19d33b5568fe14117b0c55fc4ccf423541730 (diff) | |
| download | vyos-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-x | src/conf_mode/vpp.py | 14 | ||||
| -rwxr-xr-x | src/helpers/reset_section.py | 3 |
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) |
