Extend configurable skippability of neutron calls to project instance detail

The OPENSTACK_INSTANCE_RETRIEVE_IP_ADDRESSES config aids
in envs struggling to load the instance list due to having
too many ports or bad neutron plugin performance. However,
the config does not apply its effect to the instance detail
page, which cannot be loaded due to the neutron calls
taking too long.

This patch extends the config option to the instance
detail page, allowing the same benefit (and side-effects)
of the instance list page.

Related-bug: #2045168
Change-Id: I3e71a208a1c7212e168d63a259f2adddf27dbabf
This commit is contained in:
Rodrigo Barbieri 2024-01-26 15:10:41 -03:00 committed by Rodrigo Barbieri
parent 1ea7c827f6
commit 95089025fd
2 changed files with 23 additions and 3 deletions

View File

@ -1338,7 +1338,8 @@ class InstanceDetailTests(InstanceTestBase):
def _get_instance_details(self, server, qs=None,
flavor_return=None, volumes_return=None,
security_groups_return=None,
flavor_exception=False, nova_api_ge_2_47=False):
flavor_exception=False, nova_api_ge_2_47=False,
skip_servers_update_addresses=False):
url = reverse('horizon:project:instances:detail', args=[server.id])
if qs:
@ -1369,8 +1370,11 @@ class InstanceDetailTests(InstanceTestBase):
self.mock_server_get.assert_called_once_with(
helpers.IsHttpRequest(), server.id)
self.mock_servers_update_addresses.assert_called_once_with(
helpers.IsHttpRequest(), mock.ANY)
if skip_servers_update_addresses:
self.mock_servers_update_addresses.assert_not_called()
else:
self.mock_servers_update_addresses.assert_called_once_with(
helpers.IsHttpRequest(), mock.ANY)
self.mock_instance_volumes_list.assert_called_once_with(
helpers.IsHttpRequest(), server.id)
if nova_api_ge_2_47:
@ -1408,6 +1412,20 @@ class InstanceDetailTests(InstanceTestBase):
self.mock_is_extension_supported.assert_called_once_with(
helpers.IsHttpRequest(), 'mac-learning')
@override_settings(OPENSTACK_INSTANCE_RETRIEVE_IP_ADDRESSES=False)
@helpers.create_mocks({api.neutron: ['is_extension_supported']})
def test_instance_details_skip_servers_update_addresses(self):
server = self.servers.first()
self.mock_is_extension_supported.return_value = False
self._get_instance_details(
server,
skip_servers_update_addresses=True)
self.mock_is_extension_supported.assert_called_once_with(
helpers.IsHttpRequest(), 'mac-learning')
@helpers.create_mocks({api.neutron: ['is_extension_supported']})
def test_instance_details_volume_sorting(self):
server = self.servers.first()

View File

@ -535,6 +535,8 @@ class DetailView(tabs.TabView):
exceptions.handle(self.request, msg, ignore=True)
def _update_addresses(self, instance):
if not settings.OPENSTACK_INSTANCE_RETRIEVE_IP_ADDRESSES:
return
instance_id = instance.id
try:
api.network.servers_update_addresses(self.request, [instance])