diff --git a/cinder/objects/group.py b/cinder/objects/group.py index 74dab0f5219..7ad613f23fe 100644 --- a/cinder/objects/group.py +++ b/cinder/objects/group.py @@ -12,13 +12,15 @@ # License for the specific language governing permissions and limitations # under the License. +from oslo_utils import versionutils +from oslo_versionedobjects import fields + from cinder import db from cinder import exception from cinder.i18n import _ from cinder import objects from cinder.objects import base from cinder.objects import fields as c_fields -from oslo_versionedobjects import fields @base.CinderObjectRegistry.register @@ -52,6 +54,15 @@ class Group(base.CinderPersistentObject, base.CinderObject, nullable=True), } + def obj_make_compatible(self, primitive, target_version): + """Make an object representation compatible with target version.""" + super(Group, self).obj_make_compatible(primitive, target_version) + target_version = versionutils.convert_version_to_tuple(target_version) + if target_version < (1, 1): + for key in ('group_snapshot_id', 'source_group_id', + 'group_snapshots'): + primitive.pop(key, None) + @staticmethod def _from_db_object(context, group, db_group, expected_attrs=None): diff --git a/cinder/tests/unit/objects/test_group.py b/cinder/tests/unit/objects/test_group.py index fff36e207b2..b6160a94640 100644 --- a/cinder/tests/unit/objects/test_group.py +++ b/cinder/tests/unit/objects/test_group.py @@ -12,11 +12,13 @@ # License for the specific language governing permissions and limitations # under the License. +import ddt import mock import six 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 import fake_constants as fake from cinder.tests.unit import fake_volume @@ -35,6 +37,7 @@ fake_group = { } +@ddt.ddt class TestGroup(test_objects.BaseObjectsTestCase): @mock.patch('cinder.db.sqlalchemy.api.group_get', @@ -160,6 +163,22 @@ class TestGroup(test_objects.BaseObjectsTestCase): self.assertEqual(len(db_volumes), len(group.volumes)) self._compare(self, db_volumes[0], group.volumes[0]) + @ddt.data('1.10', '1.11') + def test_obj_make_compatible(self, version): + extra_data = {'group_snapshot_id': fake.GROUP_SNAPSHOT_ID, + 'source_group_id': fake.GROUP_ID, + 'group_snapshots': objects.GroupSnapshotList()} + group = objects.Group(self.context, name='name', **extra_data) + + serializer = ovo_base.CinderObjectSerializer(version) + primitive = serializer.serialize_entity(self.context, group) + + converted_group = objects.Group.obj_from_primitive(primitive) + is_set = version == '1.11' + for key in extra_data: + self.assertEqual(is_set, converted_group.obj_attr_is_set(key)) + self.assertEqual('name', converted_group.name) + class TestGroupList(test_objects.BaseObjectsTestCase): @mock.patch('cinder.db.group_get_all',