Merge "Fix up Service object for manifest-based backports"
This commit is contained in:
commit
3d19aa8110
@ -125,8 +125,10 @@ class Service(base.NovaPersistentObject, base.NovaObject,
|
||||
super(Service, self).__init__(*args, **kwargs)
|
||||
self.version = SERVICE_VERSION
|
||||
|
||||
def obj_make_compatible(self, primitive, target_version):
|
||||
super(Service, self).obj_make_compatible(primitive, target_version)
|
||||
def obj_make_compatible_from_manifest(self, primitive, target_version,
|
||||
version_manifest):
|
||||
super(Service, self).obj_make_compatible_from_manifest(
|
||||
primitive, target_version, version_manifest)
|
||||
_target_version = utils.convert_version_to_tuple(target_version)
|
||||
if _target_version < (1, 16) and 'version' in primitive:
|
||||
del primitive['version']
|
||||
@ -135,15 +137,14 @@ class Service(base.NovaPersistentObject, base.NovaObject,
|
||||
if _target_version < (1, 13) and 'last_seen_up' in primitive:
|
||||
del primitive['last_seen_up']
|
||||
if _target_version < (1, 10):
|
||||
target_compute_version = self.obj_calculate_child_version(
|
||||
target_version, 'compute_node')
|
||||
# service.compute_node was not lazy-loaded, we need to provide it
|
||||
# when called
|
||||
self._do_compute_node(self._context, primitive,
|
||||
target_compute_version)
|
||||
version_manifest)
|
||||
|
||||
def _do_compute_node(self, context, primitive, target_version):
|
||||
def _do_compute_node(self, context, primitive, version_manifest):
|
||||
try:
|
||||
target_version = version_manifest['ComputeNode']
|
||||
# NOTE(sbauza): Some drivers (VMware, Ironic) can have multiple
|
||||
# nodes for the same service, but for keeping same behaviour,
|
||||
# returning only the first elem of the list
|
||||
@ -152,7 +153,8 @@ class Service(base.NovaPersistentObject, base.NovaObject,
|
||||
except Exception:
|
||||
return
|
||||
primitive['compute_node'] = compute.obj_to_primitive(
|
||||
target_version=target_version)
|
||||
target_version=target_version,
|
||||
version_manifest=version_manifest)
|
||||
|
||||
@staticmethod
|
||||
def _from_db_object(context, service, db_service):
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
import mock
|
||||
from oslo_utils import timeutils
|
||||
from oslo_versionedobjects import base as ovo_base
|
||||
from oslo_versionedobjects import exception as ovo_exc
|
||||
|
||||
from nova.compute import manager as compute_manager
|
||||
@ -254,32 +255,15 @@ class _TestServiceObject(object):
|
||||
service_id=fake_service['id'])
|
||||
get_all_by_host.return_value = [fake_compute_obj]
|
||||
|
||||
service_obj.obj_make_compatible(fake_service_dict, '1.9')
|
||||
versions = ovo_base.obj_tree_get_versions('Service')
|
||||
versions['ComputeNode'] = '1.10'
|
||||
service_obj.obj_make_compatible_from_manifest(fake_service_dict, '1.9',
|
||||
versions)
|
||||
self.assertEqual(
|
||||
fake_compute_obj.obj_to_primitive(target_version='1.10'),
|
||||
fake_compute_obj.obj_to_primitive(target_version='1.10',
|
||||
version_manifest=versions),
|
||||
fake_service_dict['compute_node'])
|
||||
|
||||
@mock.patch.object(objects.ComputeNodeList, 'get_all_by_host')
|
||||
def test_obj_make_compatible_with_juno_computes(self, get_all_by_host):
|
||||
service_attrs = dict(fake_service)
|
||||
del service_attrs['version']
|
||||
service_obj = objects.Service(
|
||||
context=self.context, **service_attrs)
|
||||
service_obj.binary = 'nova-compute'
|
||||
fake_service_dict = fake_service.copy()
|
||||
fake_service_dict['binary'] = 'nova-compute'
|
||||
fake_compute_obj = objects.ComputeNode(host=fake_service['host'],
|
||||
service_id=fake_service['id'])
|
||||
get_all_by_host.return_value = [fake_compute_obj]
|
||||
|
||||
# Juno versions :
|
||||
# Service : 1.4
|
||||
# ComputeNode : 1.5
|
||||
service_obj.obj_make_compatible(fake_service_dict, '1.4')
|
||||
self.assertEqual(
|
||||
'1.5',
|
||||
fake_service_dict['compute_node']['nova_object.version'])
|
||||
|
||||
@mock.patch('nova.db.service_get_minimum_version')
|
||||
def test_get_minimum_version_none(self, mock_get):
|
||||
mock_get.return_value = None
|
||||
|
Loading…
x
Reference in New Issue
Block a user