List instances performace optimization

Join service table for microversion starting 2.16 only
so only include service from 2.16 version.

Co-Authored-By: jichenjc <jichenjc@cn.ibm.com>

Closes-Bug: 1719460

Change-Id: I6c57fa013ee8f6d064fc747906e1234a0aa3e8c2
This commit is contained in:
Andrey Volkov 2017-09-27 09:40:22 +03:00 committed by Matt Riedemann
parent a5a569d667
commit a0b4116ed6
2 changed files with 15 additions and 3 deletions

View File

@ -292,7 +292,8 @@ class ServersController(wsgi.Controller):
expected_attrs = []
if is_detail:
expected_attrs.append('services')
if api_version_request.is_supported(req, '2.16'):
expected_attrs.append('services')
if api_version_request.is_supported(req, '2.26'):
expected_attrs.append("tags")

View File

@ -1432,17 +1432,28 @@ class ServersControllerTest(ControllerTest):
self.assertEqual(s['name'], 'server%d' % (i + 1))
def test_get_servers_joins_services(self):
def fake_get_all(compute_self, context, search_opts=None,
limit=None, marker=None,
expected_attrs=None, sort_keys=None, sort_dirs=None):
self.assertIn('services', expected_attrs)
cur = api_version_request.APIVersionRequest(self.wsgi_api_version)
v216 = api_version_request.APIVersionRequest('2.16')
if cur >= v216:
self.assertIn('services', expected_attrs)
else:
self.assertNotIn('services', expected_attrs)
return objects.InstanceList()
self.stubs.Set(compute_api.API, 'get_all', fake_get_all)
self.stub_out("nova.compute.api.API.get_all", fake_get_all)
req = self.req('/fake/servers/detail', use_admin_context=True)
self.assertIn('servers', self.controller.detail(req))
req = fakes.HTTPRequest.blank('/fake/servers/detail',
use_admin_context=True,
version=self.wsgi_api_version)
self.assertIn('servers', self.controller.detail(req))
class ServersControllerTestV29(ServersControllerTest):
wsgi_api_version = '2.9'