From: Digvijay Ukirde Date: Tue, 22 Dec 2015 09:54:03 +0000 (+0530) Subject: Fix creating volume by snapshot for GPFS driver X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=73cd77712c3607b59c5578037e36b1c8cf150c8c;p=openstack-build%2Fcinder-build.git Fix creating volume by snapshot for GPFS driver For a operation of creating volume from volume snapshot, GPFS driver is currently doing a full copy instead of clone when it is creating a new volume. This happens when the source volume is not in any consistency group. With this patch, a GPFS file clone is created when both the volumes (snapshot parent volume and new volume being created) are not in any consistency group. Change-Id: I0aa550842fb16b7abb8765e4aa8dce61cd0994c3 Closes-bug: #1528305 --- diff --git a/cinder/tests/unit/test_gpfs.py b/cinder/tests/unit/test_gpfs.py index 14d7dcc5a..2bdecae42 100644 --- a/cinder/tests/unit/test_gpfs.py +++ b/cinder/tests/unit/test_gpfs.py @@ -855,6 +855,9 @@ class GPFSDriverTestCase(test.TestCase): mock_resize_volume_file.return_value = 5 * units.Gi volume = self._fake_volume() volume['consistencygroup_id'] = None + self.driver.db = mock.Mock() + self.driver.db.volume_get = mock.Mock() + self.driver.db.volume_get.return_value = volume snapshot = self._fake_snapshot() mock_snapshot_path.return_value = "/tmp/fakepath" self.assertEqual({'size': 5.0}, @@ -885,6 +888,9 @@ class GPFSDriverTestCase(test.TestCase): mock_resize_volume_file.return_value = 5 * units.Gi volume = self._fake_volume() volume['consistencygroup_id'] = None + self.driver.db = mock.Mock() + self.driver.db.volume_get = mock.Mock() + self.driver.db.volume_get.return_value = volume snapshot = self._fake_snapshot() mock_snapshot_path.return_value = "/tmp/fakepath" mock_set_volume_attributes.return_value = True diff --git a/cinder/volume/drivers/ibm/gpfs.py b/cinder/volume/drivers/ibm/gpfs.py index 5fbb70e2f..656e6a9c4 100644 --- a/cinder/volume/drivers/ibm/gpfs.py +++ b/cinder/volume/drivers/ibm/gpfs.py @@ -542,12 +542,11 @@ class GPFSDriver(driver.ConsistencyGroupVD, driver.ExtendVD, # check if the snapshot lies in the same CG as the volume to be created # if yes, clone the volume from the snapshot, else perform full copy clone = False - if volume['consistencygroup_id'] is not None: - ctxt = context.get_admin_context() - snap_parent_vol = self.db.volume_get(ctxt, snapshot['volume_id']) - if (volume['consistencygroup_id'] == - snap_parent_vol['consistencygroup_id']): - clone = True + ctxt = context.get_admin_context() + snap_parent_vol = self.db.volume_get(ctxt, snapshot['volume_id']) + if (volume['consistencygroup_id'] == + snap_parent_vol['consistencygroup_id']): + clone = True volume_path = self._get_volume_path(volume) if clone: self._create_gpfs_copy(src=snapshot_path, dest=volume_path)