From e08da42d81a6f4a5cbb72216ecddc0c4cf3807f4 Mon Sep 17 00:00:00 2001 From: Vipin Balachandran Date: Fri, 25 May 2018 13:17:51 -0700 Subject: [PATCH] Fix group availability zone-backend host mismatch Group availability zone is not set correctly in scheduler filter properties which results in group availability zone-backend host mismatch. This can lead to volume create failure for volumes in the group. Fixing it by setting the availability zone in the request spec in scheduler RPC call. Change-Id: Icfa437d2d81ed29d0aceee776d86e28862c85274 Closes-bug: 1773446 --- cinder/group/api.py | 1 + cinder/tests/unit/group/test_groups_api.py | 80 +++++++++++++++++++ .../notes/bug-1773446-984d76ed29445c9b.yaml | 5 ++ 3 files changed, 86 insertions(+) create mode 100644 releasenotes/notes/bug-1773446-984d76ed29445c9b.yaml diff --git a/cinder/group/api.py b/cinder/group/api.py index c476834841d..88e87ff6a58 100644 --- a/cinder/group/api.py +++ b/cinder/group/api.py @@ -455,6 +455,7 @@ class API(base.Base): 'display_name': request_spec.get('name'), 'volume_type_id': volume_type_id, 'group_type_id': group.group_type_id, + 'availability_zone': group.availability_zone } request_spec['volume_properties'] = volume_properties diff --git a/cinder/tests/unit/group/test_groups_api.py b/cinder/tests/unit/group/test_groups_api.py index 23fecfa3c28..98cef2e3afc 100644 --- a/cinder/tests/unit/group/test_groups_api.py +++ b/cinder/tests/unit/group/test_groups_api.py @@ -764,3 +764,83 @@ class GroupAPITestCase(test.TestCase): self.assertRaises(exception.InvalidInput, group_api.delete_group_snapshot, self.ctxt, gsnap) + + @mock.patch('cinder.volume.volume_types.get_volume_type_qos_specs', + return_value={'qos_specs': {}}) + @mock.patch('cinder.scheduler.rpcapi.SchedulerAPI.create_group') + def test_cast_create_group(self, + mock_create_group, + mock_get_volume_type_qos_specs): + vol_type = utils.create_volume_type(self.ctxt, name='test_vol_type') + encryption_key_id = mock.sentinel.encryption_key_id + description = mock.sentinel.description + name = mock.sentinel.name + req_spec = {'volume_type': vol_type, + 'encryption_key_id': encryption_key_id, + 'description': description, + 'name': name} + + grp_name = "test_group" + grp_description = "this is a test group" + grp_spec = {'name': grp_name, + 'description': grp_description} + + grp = utils.create_group(self.ctxt, + group_type_id=fake.GROUP_TYPE_ID, + volume_type_ids=[vol_type.id], + availability_zone='nova') + + grp_filter_properties = mock.sentinel.group_filter_properties + filter_properties_list = mock.sentinel.filter_properties_list + self.group_api._cast_create_group(self.ctxt, + grp, + grp_spec, + [req_spec], + grp_filter_properties, + filter_properties_list) + + mock_get_volume_type_qos_specs.assert_called_once_with(vol_type.id) + + exp_vol_properties = { + 'size': 0, + 'user_id': self.ctxt.user_id, + 'project_id': self.ctxt.project_id, + 'status': 'creating', + 'attach_status': 'detached', + 'encryption_key_id': encryption_key_id, + 'display_description': description, + 'display_name': name, + 'volume_type_id': vol_type.id, + 'group_type_id': grp.group_type_id, + 'availability_zone': grp.availability_zone + } + exp_req_spec = { + 'volume_type': vol_type, + 'encryption_key_id': encryption_key_id, + 'description': description, + 'name': name, + 'volume_properties': exp_vol_properties, + 'qos_specs': None + } + exp_grp_properties = { + 'size': 0, + 'user_id': self.ctxt.user_id, + 'project_id': self.ctxt.project_id, + 'status': 'creating', + 'display_description': grp_description, + 'display_name': grp_name, + 'group_type_id': grp.group_type_id, + } + exp_grp_spec = { + 'name': grp_name, + 'description': grp_description, + 'volume_properties': exp_grp_properties, + 'qos_specs': None + } + mock_create_group.assert_called_once_with( + self.ctxt, + grp, + group_spec=exp_grp_spec, + request_spec_list=[exp_req_spec], + group_filter_properties=grp_filter_properties, + filter_properties_list=filter_properties_list) diff --git a/releasenotes/notes/bug-1773446-984d76ed29445c9b.yaml b/releasenotes/notes/bug-1773446-984d76ed29445c9b.yaml new file mode 100644 index 00000000000..d5fdc9d0ebd --- /dev/null +++ b/releasenotes/notes/bug-1773446-984d76ed29445c9b.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed group availability zone-backend host mismatch + [`Bug 1773446 `_].