Skip to content

Commit

Permalink
Merge "GPFS Driver missing clone depth limit for snapshots"
Browse files Browse the repository at this point in the history
  • Loading branch information
Jenkins authored and openstack-gerrit committed Sep 24, 2013
2 parents 9bcb728 + cbb0571 commit 180513d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
6 changes: 3 additions & 3 deletions cinder/tests/test_gpfs.py
Expand Up @@ -203,8 +203,8 @@ def test_create_delete_snapshot(self):
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,
Expand All @@ -231,8 +231,8 @@ def test_create_volume_from_snapshot(self):
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)
Expand Down Expand Up @@ -269,9 +269,9 @@ def test_create_volume_from_snapshot_method(self):
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
Expand Down
15 changes: 12 additions & 3 deletions cinder/volume/drivers/gpfs.py
Expand Up @@ -323,7 +323,7 @@ def _delete_gpfs_file(self, fchild):
# 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):
Expand Down Expand Up @@ -381,11 +381,20 @@ def create_snapshot(self, snapshot):
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,
Expand Down

0 comments on commit 180513d

Please sign in to comment.