| From 37a2ad8ba2de741e90421e4d0590af02a69e4ba9 Mon Sep 17 00:00:00 2001 |
| From: Peter Penchev <openstack-dev@storpool.com> |
| Date: Wed, 15 Jun 2022 16:07:34 +0300 |
| Subject: [PATCH 4/8] StorPool: really detach after copy to/from image. |
| |
| When copying a volume to an image, detach the temporary snapshot after |
| the copy operation, otherwise the attempt to delete it immediately |
| afterwards will fail. When copying an image to a volume, detach |
| the volume after the copy operation. |
| |
| This only matters when Cinder is not used as a backing store for Glance |
| images; otherwise, these functions are never invoked and volumes are |
| cloned instead (modulo other bugs in these workflows). |
| |
| Change-Id: Id93d578763bcd444e093cac4bd91b6fe68ffd12f |
| Closes-bug: #1978825 |
| --- |
| cinder/volume/drivers/storpool.py | 34 +++++++++++++++---- |
| ...ach-after-image-copy-6c4dff727583fe17.yaml | 7 ++++ |
| 2 files changed, 34 insertions(+), 7 deletions(-) |
| create mode 100644 releasenotes/notes/bug-1978825-storpool-detach-after-image-copy-6c4dff727583fe17.yaml |
| |
| diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py |
| index 4d79a82f8..56b4070bc 100644 |
| --- a/cinder/volume/drivers/storpool.py |
| +++ b/cinder/volume/drivers/storpool.py |
| @@ -93,6 +93,8 @@ class StorPoolDriver(driver.VolumeDriver): |
| 1.2.3 - Advertise some more driver capabilities. |
| 2.0.0 - Drop _attach_volume() and _detach_volume(), our os-brick |
| connector will handle this. |
| + - Detach temporary snapshots and volumes after copying data |
| + to or from from Glance images. |
| """ |
| |
| VERSION = '2.0.0' |
| @@ -351,20 +353,28 @@ class StorPoolDriver(driver.VolumeDriver): |
| name = self._attach.volsnapName(volume['id'], req_id) |
| try: |
| self._attach.api().snapshotCreate(volname, {'name': name}) |
| + self._attach.add(req_id, { |
| + 'volume': name, |
| + 'type': 'copy-from', |
| + 'id': req_id, |
| + 'rights': 1, |
| + 'volsnap': True |
| + }) |
| + self._attach.sync(req_id, None) |
| except spapi.ApiError as e: |
| raise self._backendException(e) |
| - self._attach.add(req_id, { |
| - 'volume': name, |
| - 'type': 'copy-from', |
| - 'id': req_id, |
| - 'rights': 1, |
| - 'volsnap': True |
| - }) |
| try: |
| return super(StorPoolDriver, self).copy_volume_to_image( |
| context, volume, image_service, image_meta) |
| finally: |
| self._attach.remove(req_id) |
| + try: |
| + self._attach.sync(req_id, name) |
| + except spapi.ApiError as e: |
| + LOG.error( |
| + 'Could not detach the temp snapshot %(name)s for ' |
| + '%(vol)s: %(err)s', |
| + {'name': name, 'vol': volname, 'err': e}) |
| try: |
| self._attach.api().snapshotDelete(name) |
| except spapi.ApiError as e: |
| @@ -382,11 +392,21 @@ class StorPoolDriver(driver.VolumeDriver): |
| 'id': req_id, |
| 'rights': 2 |
| }) |
| + try: |
| + self._attach.sync(req_id, None) |
| + except spapi.ApiError as e: |
| + raise self._backendException(e) |
| try: |
| return super(StorPoolDriver, self).copy_image_to_volume( |
| context, volume, image_service, image_id) |
| finally: |
| self._attach.remove(req_id) |
| + try: |
| + self._attach.sync(req_id, name) |
| + except spapi.ApiError as e: |
| + LOG.error( |
| + 'Could not detach the %(name)s volume: %(err)s', |
| + {'name': name, 'err': e}) |
| |
| def extend_volume(self, volume, new_size): |
| size = int(new_size) * units.Gi |
| diff --git a/releasenotes/notes/bug-1978825-storpool-detach-after-image-copy-6c4dff727583fe17.yaml b/releasenotes/notes/bug-1978825-storpool-detach-after-image-copy-6c4dff727583fe17.yaml |
| new file mode 100644 |
| index 000000000..bfc6ef3dc |
| --- /dev/null |
| +++ b/releasenotes/notes/bug-1978825-storpool-detach-after-image-copy-6c4dff727583fe17.yaml |
| @@ -0,0 +1,7 @@ |
| +--- |
| +fixes: |
| + - | |
| + StorPool driver `bug #1978825 |
| + <https://bugs.launchpad.net/cinder/+bug/1978825>`_: Fixed |
| + stale StorPool volume and snapshot attachments persisting after |
| + copying a volume to/from a Glance image. |
| -- |
| 2.35.1 |
| |