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
This commit is contained in:
Digvijay Ukirde 2015-12-22 15:24:03 +05:30
parent a4e7656620
commit 73cd77712c
2 changed files with 11 additions and 6 deletions

View File

@ -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

View File

@ -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)