Merge "GPFS Driver missing clone depth limit for snapshots"

This commit is contained in:
Jenkins 2013-09-24 06:32:28 +00:00 committed by Gerrit Code Review
commit 180513d5e4
2 changed files with 15 additions and 6 deletions

View File

@ -203,8 +203,8 @@ class GPFSDriverTestCase(test.TestCase):
snapCount = len(db.snapshot_get_all_for_volume(self.context,
volume_src['id']))
self.assertTrue(snapCount == 1)
self.volume.delete_volume(self.context, volume_src['id'])
self.volume.delete_snapshot(self.context, snapshot_id)
self.volume.delete_volume(self.context, volume_src['id'])
self.assertFalse(os.path.exists(os.path.join(self.volumes_path,
snapshot['name'])))
snapCount = len(db.snapshot_get_all_for_volume(self.context,
@ -231,8 +231,8 @@ class GPFSDriverTestCase(test.TestCase):
volume_dst['id']).snapshot_id)
self.volume.delete_volume(self.context, volume_dst['id'])
self.volume.delete_volume(self.context, volume_src['id'])
self.volume.delete_snapshot(self.context, snapshot_id)
self.volume.delete_volume(self.context, volume_src['id'])
def test_create_cloned_volume(self):
volume_src = test_utils.create_volume(self.context, host=CONF.host)
@ -269,9 +269,9 @@ class GPFSDriverTestCase(test.TestCase):
volumepath = os.path.join(self.volumes_path, volume_dst['name'])
self.assertTrue(os.path.exists(volumepath))
self.volume.delete_snapshot(self.context, snapshot_id)
self.volume.delete_volume(self.context, volume_dst['id'])
self.volume.delete_volume(self.context, volume_src['id'])
self.volume.delete_snapshot(self.context, snapshot_id)
def test_clone_image_to_volume_with_copy_on_write_mode(self):
"""Test the function of copy_image_to_volume

View File

@ -323,7 +323,7 @@ class GPFSDriver(driver.VolumeDriver):
# would succeed and the snapshot is deleted.
if not os.path.exists(fchild) and fparent:
fpbase = os.path.basename(fparent)
if (fpbase.startswith('snapshot-') or fpbase.endswith('.snap')):
if (fpbase.endswith('.snap') or fpbase.endswith('.ts')):
self._delete_gpfs_file(fparent)
def delete_volume(self, volume):
@ -381,11 +381,20 @@ class GPFSDriver(driver.VolumeDriver):
volume_path = os.path.join(self.configuration.gpfs_mount_point_base,
snapshot['volume_name'])
self._create_gpfs_snap(src=volume_path, dest=snapshot_path)
self._gpfs_redirect(volume_path)
def delete_snapshot(self, snapshot):
"""Deletes a GPFS snapshot."""
# A snapshot file is deleted as a part of delete_volume when
# all volumes derived from it are deleted.
# Rename the deleted snapshot to indicate it no longer exists in
# cinder db. Attempt to delete the snapshot. If the snapshot has
# clone children, the delete will fail silently. When volumes that
# are clone children are deleted in the future, the remaining ts
# snapshots will also be deleted.
snapshot_path = self.local_path(snapshot)
snapshot_ts_path = '%s.ts' % snapshot_path
os.rename(snapshot_path, snapshot_ts_path)
self._execute('rm', '-f', snapshot_ts_path,
check_exit_code=False, run_as_root=True)
def local_path(self, volume):
return os.path.join(self.configuration.gpfs_mount_point_base,