Merge "Cache the automatic version pin to avoid repeated lookups"

This commit is contained in:
Jenkins
2015-12-10 22:29:46 +00:00
committed by Gerrit Code Review
3 changed files with 19 additions and 0 deletions

View File

@@ -720,6 +720,7 @@ class ComputeManager(manager.Manager):
def reset(self):
LOG.info(_LI('Reloading compute RPC API'))
compute_rpcapi.LAST_VERSION = None
self.compute_rpcapi = compute_rpcapi.ComputeAPI()
def _get_resource_tracker(self, nodename):

View File

@@ -53,6 +53,7 @@ rpcapi_cap_opt = cfg.StrOpt('compute',
CONF.register_opt(rpcapi_cap_opt, 'upgrade_levels')
LOG = logging.getLogger(__name__)
LAST_VERSION = None
def _compute_host(host, instance):
@@ -339,6 +340,9 @@ class ComputeAPI(object):
self.client = self.get_client(target, version_cap, serializer)
def _determine_version_cap(self, target):
global LAST_VERSION
if LAST_VERSION:
return LAST_VERSION
service_version = objects.Service.get_minimum_version(
context.get_admin_context(), 'nova-compute')
history = service_obj.SERVICE_VERSION_HISTORY
@@ -356,6 +360,7 @@ class ComputeAPI(object):
'service history for version %(version)i'),
{'version': service_version})
return target.version
LAST_VERSION = version_cap
LOG.info(_LI('Automatically selected compute RPC version %(rpc)s '
'from minimum service version %(service)i'),
{'rpc': version_cap,

View File

@@ -55,6 +55,7 @@ class ComputeRpcAPITestCase(test.NoDBTestCase):
def test_auto_pin(self, mock_get_min):
mock_get_min.return_value = 1
self.flags(compute='auto', group='upgrade_levels')
compute_rpcapi.LAST_VERSION = None
rpcapi = compute_rpcapi.ComputeAPI()
self.assertEqual('4.4', rpcapi.client.version_cap)
mock_get_min.assert_called_once_with(mock.ANY, 'nova-compute')
@@ -63,6 +64,7 @@ class ComputeRpcAPITestCase(test.NoDBTestCase):
def test_auto_pin_fails_if_too_old(self, mock_get_min):
mock_get_min.return_value = 1955
self.flags(compute='auto', group='upgrade_levels')
compute_rpcapi.LAST_VERSION = None
self.assertRaises(exception.ServiceTooOld,
compute_rpcapi.ComputeAPI)
@@ -70,10 +72,21 @@ class ComputeRpcAPITestCase(test.NoDBTestCase):
def test_auto_pin_kilo(self, mock_get_min):
mock_get_min.return_value = 0
self.flags(compute='auto', group='upgrade_levels')
compute_rpcapi.LAST_VERSION = None
rpcapi = compute_rpcapi.ComputeAPI()
self.assertEqual('4.0', rpcapi.client.version_cap)
mock_get_min.assert_called_once_with(mock.ANY, 'nova-compute')
@mock.patch('nova.objects.Service.get_minimum_version')
def test_auto_pin_caches(self, mock_get_min):
mock_get_min.return_value = 1
self.flags(compute='auto', group='upgrade_levels')
compute_rpcapi.LAST_VERSION = None
compute_rpcapi.ComputeAPI()
compute_rpcapi.ComputeAPI()
mock_get_min.assert_called_once_with(mock.ANY, 'nova-compute')
self.assertEqual('4.4', compute_rpcapi.LAST_VERSION)
def _test_compute_api(self, method, rpc_method,
expected_args=None, **kwargs):
ctxt = context.RequestContext('fake_user', 'fake_project')