Merge "If OVS Manager creation failes retry to set values"

This commit is contained in:
Zuul
2025-03-31 17:23:50 +00:00
committed by Gerrit Code Review
3 changed files with 58 additions and 3 deletions

View File

@@ -26,6 +26,6 @@ ml2_ovs_conf.register_ovs_opts(cfg=cfg.CONF)
enable_connection_uri = functools.partial(
priv_helpers.enable_connection_uri,
log_fail_as_error=False, check_exit_code=False,
log_fail_as_error=False, check_exit_code=True,
timeout=cfg.CONF.OVS.ovsdb_timeout,
inactivity_probe=cfg.CONF.OVS.of_inactivity_probe * 1000)

View File

@@ -13,11 +13,15 @@
# under the License.
from oslo_concurrency import processutils
from oslo_log import log as logging
from oslo_utils import netutils
from neutron import privileged
LOG = logging.getLogger(__name__)
def _connection_to_manager_uri(conn_uri):
proto, addr = conn_uri.split(':', 1)
ip, port = netutils.parse_host_port(addr)
@@ -45,5 +49,30 @@ def enable_connection_uri(conn_uri, log_fail_as_error=False,
'--', 'add', 'Open_vSwitch', '.', 'manager_options', '@manager']
if probe is not None:
cmd += ['--', 'set', 'Manager', man_uri, 'inactivity_probe=%s' % probe]
return processutils.execute(*cmd, log_errors=log_fail_as_error,
check_exit_code=check_exit_code)
try:
processutils.execute(*cmd, log_errors=log_fail_as_error,
check_exit_code=check_exit_code)
except processutils.ProcessExecutionError as pe:
LOG.warning("OVS Manager creation failed, it might already "
"exist (stderr: %s).", pe.stderr)
if probe is None:
LOG.debug("No new value for inactivity_probe, re-creation of "
"OVS Manager is not necessary")
return
# Try to fetch Manager table as it is already exists and see if
# inactivity_probe is already the desired value
cmd = ['ovs-vsctl', '--timeout=%d' % timeout, '--id=@manager',
'--', 'get', 'Manager', man_uri, 'inactivity_probe']
in_probe = processutils.execute(*cmd, log_errors=log_fail_as_error,
check_exit_code=True)
if in_probe[0].strip() == str(probe):
LOG.info("OVS Manager is already created and inactivity_probe "
"is set to %s.", in_probe[0].strip())
return in_probe
cmd = ['ovs-vsctl', '--timeout=%d' % timeout, '--', 'set',
'Manager', man_uri, 'inactivity_probe=%s' % probe]
processutils.execute(*cmd, log_errors=log_fail_as_error,
check_exit_code=True)
LOG.info("OVS Manager was set with new inactivity_probe "
"value %s.", probe)

View File

@@ -51,3 +51,29 @@ class EnableConnectionUriTestCase(base.BaseSudoTestCase):
for connection in manager_connections:
self.assertNotIn(connection, ovs.ovsdb.get_manager().execute())
def test_add_manager_overwrites_existing_manager(self):
ovs = ovs_lib.BaseOVS()
_port = self.useFixture(port.ExclusivePort(
const.PROTO_NAME_TCP,
start=net_helpers.OVS_MANAGER_TEST_PORT_FIRST,
end=net_helpers.OVS_MANAGER_TEST_PORT_LAST)).port
ovsdb_cfg_connection = 'tcp:127.0.0.1:%s' % _port
manager_connection = 'ptcp:%s:127.0.0.1' % _port
helpers.enable_connection_uri(ovsdb_cfg_connection,
inactivity_probe=10)
self.addCleanup(ovs.ovsdb.remove_manager(manager_connection).execute)
# First call of enable_connection_uri cretes the manager
# and the list returned by get_manager contains it:
my_mans = ovs.ovsdb.get_manager().execute()
self.assertIn(manager_connection, my_mans)
# after 2nd call of enable_connection_uri with new value of
# inactivity_probe will keep the original manager only the
# inactivity_probe value is set:
helpers.enable_connection_uri(ovsdb_cfg_connection,
inactivity_probe=100)
my_mans = ovs.ovsdb.get_manager().execute()
self.assertIn(manager_connection, my_mans)