Merge "[OVN] Fix RowNotFound exception while waiting for metadata networks" into stable/ussuri

This commit is contained in:
Zuul 2022-01-07 23:48:11 +00:00 committed by Gerrit Code Review
commit f35981130e
3 changed files with 57 additions and 1 deletions

View File

@ -849,7 +849,12 @@ class OvsdbSbOvnIdl(sb_impl_idl.OvnSbApiIdlImpl, Backend):
def get_chassis_metadata_networks(self, chassis_name): def get_chassis_metadata_networks(self, chassis_name):
"""Return a list with the metadata networks the chassis is hosting.""" """Return a list with the metadata networks the chassis is hosting."""
chassis = self.lookup('Chassis', chassis_name) try:
chassis = self.lookup('Chassis', chassis_name)
except idlutils.RowNotFound:
LOG.warning("Couldn't find Chassis named %s in OVN while looking "
"for metadata networks", chassis_name)
return []
proxy_networks = chassis.external_ids.get( proxy_networks = chassis.external_ids.get(
'neutron-metadata-proxy-networks', None) 'neutron-metadata-proxy-networks', None)
return proxy_networks.split(',') if proxy_networks else [] return proxy_networks.split(',') if proxy_networks else []

View File

@ -410,6 +410,7 @@ class FakeOvsdbTable(FakeResource):
ovsdb_table_attrs = { ovsdb_table_attrs = {
'rows': {}, 'rows': {},
'columns': {}, 'columns': {},
'indexes': [],
} }
# Overwrite default attributes. # Overwrite default attributes.

View File

@ -17,6 +17,8 @@ import uuid
import mock import mock
from ovsdbapp.backend import ovs_idl
from neutron.common.ovn import constants as ovn_const from neutron.common.ovn import constants as ovn_const
from neutron.common.ovn import utils from neutron.common.ovn import utils
from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb import impl_idl_ovn from neutron.plugins.ml2.drivers.ovn.mech_driver.ovsdb import impl_idl_ovn
@ -758,3 +760,51 @@ class TestNBImplIdlOvn(TestDBImplIdlOvn):
self._tables.pop('Port_Group', None) self._tables.pop('Port_Group', None)
port_groups = self.nb_ovn_idl.get_port_groups() port_groups = self.nb_ovn_idl.get_port_groups()
self.assertEqual({}, port_groups) self.assertEqual({}, port_groups)
class TestSBImplIdlOvn(TestDBImplIdlOvn):
fake_set = {
'chassis': [
{'name': 'fake-chassis',
'external_ids': {'neutron-metadata-proxy-networks': 'fake-id'}}],
}
def setUp(self):
super(TestSBImplIdlOvn, self).setUp()
self.chassis_table = fakes.FakeOvsdbTable.create_one_ovsdb_table()
self._tables = {}
self._tables['Chassis'] = self.chassis_table
with mock.patch.object(impl_idl_ovn.OvsdbSbOvnIdl, 'from_worker',
return_value=mock.Mock()):
with mock.patch.object(ovs_idl.Backend, 'autocreate_indices',
create=True):
impl_idl_ovn.OvsdbSbOvnIdl.ovsdb_connection = None
self.sb_ovn_idl = impl_idl_ovn.OvsdbSbOvnIdl(mock.MagicMock())
self.sb_ovn_idl.idl.tables = self._tables
def _load_sb_db(self):
fake_chassis = TestSBImplIdlOvn.fake_set['chassis']
self._load_ovsdb_fake_rows(self.chassis_table, fake_chassis)
@mock.patch.object(impl_idl_ovn.LOG, 'warning')
def test_get_chassis_metadata_networks_chassis_empty(self, mock_log):
chassis_name = 'fake-chassis'
result = self.sb_ovn_idl.get_chassis_metadata_networks(chassis_name)
mock_log.assert_called_once_with(
"Couldn't find Chassis named %s in OVN while looking "
"for metadata networks", chassis_name)
self.assertEqual([], result)
@mock.patch.object(impl_idl_ovn.LOG, 'warning')
def test_get_chassis_metadata_networks(self, mock_log):
chassis_name = 'fake-chassis'
self._load_sb_db()
result = self.sb_ovn_idl.get_chassis_metadata_networks(chassis_name)
self.assertFalse(mock_log.called)
self.assertEqual(['fake-id'], result)