Merge "Rolling Upgrades: Fix Volume OVO"

This commit is contained in:
Jenkins 2017-05-25 15:49:19 +00:00 committed by Gerrit Code Review
commit 5762efb5b3
2 changed files with 38 additions and 4 deletions

View File

@ -232,14 +232,17 @@ class Volume(cleanable.CinderCleanableObject, base.CinderObject,
def obj_make_compatible(self, primitive, target_version):
"""Make a Volume representation compatible with a target version."""
added_fields = (((1, 4), ('cluster', 'cluster_name')),
((1, 5), ('group', 'group_id')))
# Convert all related objects
super(Volume, self).obj_make_compatible(primitive, target_version)
target_version = versionutils.convert_version_to_tuple(target_version)
# Before v1.4 we didn't have cluster fields so we have to remove them.
if target_version < (1, 4):
for obj_field in ('cluster', 'cluster_name'):
primitive.pop(obj_field, None)
for version, remove_fields in added_fields:
if target_version < version:
for obj_field in remove_fields:
primitive.pop(obj_field, None)
@classmethod
def _from_db_object(cls, context, volume, db_volume, expected_attrs=None):

View File

@ -21,6 +21,7 @@ import six
from cinder import context
from cinder import exception
from cinder import objects
from cinder.objects import base as ovo_base
from cinder.objects import fields
from cinder.tests.unit.consistencygroup import fake_consistencygroup
from cinder.tests.unit import fake_constants as fake
@ -522,6 +523,36 @@ class TestVolume(test_objects.BaseObjectsTestCase):
self.assertEqual({}, volume.cinder_obj_get_changes())
self.assertFalse(volume_attachment_get.called)
@ddt.data('1.6', '1.7')
def test_obj_make_compatible_cluster_added(self, version):
extra_data = {'cluster_name': 'cluster_name',
'cluster': objects.Cluster()}
volume = objects.Volume(self.context, host='host', **extra_data)
serializer = ovo_base.CinderObjectSerializer(version)
primitive = serializer.serialize_entity(self.context, volume)
converted_volume = objects.Volume.obj_from_primitive(primitive)
is_set = version == '1.7'
for key in extra_data:
self.assertEqual(is_set, converted_volume.obj_attr_is_set(key))
self.assertEqual('host', converted_volume.host)
@ddt.data('1.9', '1.10')
def test_obj_make_compatible_groups_added(self, version):
extra_data = {'group_id': fake.GROUP_ID,
'group': objects.Group()}
volume = objects.Volume(self.context, host='host', **extra_data)
serializer = ovo_base.CinderObjectSerializer(version)
primitive = serializer.serialize_entity(self.context, volume)
converted_volume = objects.Volume.obj_from_primitive(primitive)
is_set = version == '1.10'
for key in extra_data:
self.assertEqual(is_set, converted_volume.obj_attr_is_set(key))
self.assertEqual('host', converted_volume.host)
@ddt.ddt
class TestVolumeList(test_objects.BaseObjectsTestCase):