Merge "Rolling Upgrades: Fix Volume OVO"
This commit is contained in:
commit
5762efb5b3
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue