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,
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)
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
# 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):
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,