Merge "Optimization for find_ls_for_lr"

This commit is contained in:
Zuul 2022-10-11 14:10:58 +00:00 committed by Gerrit Code Review
commit fa4d500f69
2 changed files with 20 additions and 39 deletions

View File

@ -711,20 +711,14 @@ class OvnProviderHelper():
return self._add_lb_to_lr_association(ovn_lb, ovn_lr, lr_ref)
def _find_ls_for_lr(self, router):
neutron_client = clients.get_neutron_client()
ls = []
for port in router.ports:
if port.gateway_chassis:
continue
sids = port.external_ids.get(
ovn_const.OVN_SUBNET_EXT_IDS_KEY, '').split(' ')
for sid in sids:
try:
subnet = neutron_client.show_subnet(sid)
ls.append(utils.ovn_name(subnet['subnet']['network_id']))
except n_exc.NotFound:
LOG.exception('Subnet %s not found while trying to '
'fetch its data.', sid)
port_network_name = port.external_ids.get(
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY)
if port_network_name:
ls.append(utils.ovn_name(port_network_name))
return ls
def _find_lr_of_ls(self, ovn_ls, subnet_gateway_ip=None):

View File

@ -2189,51 +2189,38 @@ class TestOvnProviderHelper(ovn_base.TestOvnOctaviaBase):
for lb in self.network.load_balancer:
self.assertNotIn(lb, net_lb)
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr(self, net_cli):
fake_subnet1 = fakes.FakeSubnet.create_one_subnet()
fake_subnet1['network_id'] = 'foo1'
fake_subnet2 = fakes.FakeSubnet.create_one_subnet()
fake_subnet2['network_id'] = 'foo2'
net_cli.return_value.show_subnet.side_effect = [
{'subnet': fake_subnet1},
{'subnet': fake_subnet2}]
def test__find_ls_for_lr(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'external_ids': {
ovn_const.OVN_SUBNET_EXT_IDS_KEY:
'%s %s' % (fake_subnet1.id,
fake_subnet2.id)}})
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'}})
p2 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'external_ids': {
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo2'}})
self.router.ports.append(p1)
self.router.ports.append(p2)
res = self.helper._find_ls_for_lr(self.router)
self.assertListEqual(['neutron-foo1', 'neutron-foo2'],
res)
self.assertListEqual(['neutron-foo1', 'neutron-foo2'], res)
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr_subnet_not_found(self, net_cli):
fake_subnet1 = fakes.FakeSubnet.create_one_subnet()
fake_subnet1['network_id'] = 'foo1'
fake_subnet2 = fakes.FakeSubnet.create_one_subnet()
fake_subnet2['network_id'] = 'foo2'
net_cli.return_value.show_subnet.side_effect = [
{'subnet': fake_subnet1},
n_exc.NotFound]
def test__find_ls_for_lr_net_not_found(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'external_ids': {
ovn_const.OVN_SUBNET_EXT_IDS_KEY:
'%s %s' % (fake_subnet1.id,
fake_subnet2.id)}})
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'}})
p2 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': [],
'external_ids': {}})
self.router.ports.append(p2)
self.router.ports.append(p1)
res = self.helper._find_ls_for_lr(self.router)
self.assertListEqual(['neutron-foo1'], res)
@mock.patch('ovn_octavia_provider.common.clients.get_neutron_client')
def test__find_ls_for_lr_gw_port(self, net_cli):
def test__find_ls_for_lr_gw_port(self):
p1 = fakes.FakeOVNPort.create_one_port(attrs={
'gateway_chassis': ['foo-gw-chassis'],
'external_ids': {
ovn_const.OVN_SUBNET_EXT_IDS_KEY: self.member_subnet_id}})
ovn_const.OVN_NETWORK_NAME_EXT_ID_KEY: 'foo1'}})
self.router.ports.append(p1)
result = self.helper._find_ls_for_lr(self.router)
self.assertListEqual([], result)