From 29dbfb6261738d63443bee5c48431a918c6ef376 Mon Sep 17 00:00:00 2001
From: Peter Penchev <openstack-dev@storpool.com>
Date: Tue, 20 Apr 2021 17:46:41 +0300
Subject: [PATCH 04/10] StorPool: drop _attach_volume() and _detach_volume()

Our os-brick connector already handles the "keep track of which volume
is attached for what reason" calls to storpool.spopenstack. However,
we need to explicitly specify the access mode in initialize_connection()
now, since our os-brick connector does not know how to divine it yet.
(this will come later with the "attach snapshot" functionality)

Incidentally, this fixes the "create an encrypted volume" flow, since
our _attach_volume() implementation never actually returned a connector
in the attachment info...

Change-Id: I5da7ae04b87b4fd52a682a6545060e852174f6c8
Closes-Bug: #1939241
---
 .../unit/volume/drivers/test_storpool.py      |  4 +-
 cinder/volume/drivers/storpool.py             | 40 +------------------
 ...ch-encrypted-volumes-783c723683b8f9a9.yaml |  7 ++++
 3 files changed, 11 insertions(+), 40 deletions(-)
 create mode 100644 releasenotes/notes/bug-1939241-storpool-attach-encrypted-volumes-783c723683b8f9a9.yaml

diff --git a/cinder/tests/unit/volume/drivers/test_storpool.py b/cinder/tests/unit/volume/drivers/test_storpool.py
index a5f763b96..2e6f56526 100644
--- a/cinder/tests/unit/volume/drivers/test_storpool.py
+++ b/cinder/tests/unit/volume/drivers/test_storpool.py
@@ -225,7 +225,9 @@ class StorPoolTestCase(test.TestCase):
     def test_initialize_connection_good(self, cid, hid, name):
         c = self.driver.initialize_connection({'id': hid}, {'host': name})
         self.assertEqual('storpool', c['driver_volume_type'])
-        self.assertDictEqual({'client_id': cid, 'volume': hid}, c['data'])
+        self.assertDictEqual({'client_id': cid, 'volume': hid,
+                              'access_mode': 'rw'},
+                             c['data'])
 
     def test_noop_functions(self):
         self.driver.terminate_connection(None, None)
diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py
index 8c2989fa8..cffbe9ee0 100644
--- a/cinder/volume/drivers/storpool.py
+++ b/cinder/volume/drivers/storpool.py
@@ -168,6 +168,7 @@ class StorPoolDriver(driver.VolumeDriver):
                 'data': {
                     'client_id': self._storpool_client_id(connector),
                     'volume': volume['id'],
+                    'access_mode': 'rw',
                 }}
 
     def terminate_connection(self, volume, connector, **kwargs):
@@ -315,45 +316,6 @@ class StorPoolDriver(driver.VolumeDriver):
             'pools': pools
         }
 
-    def _attach_volume(self, context, volume, properties, remote=False):
-        if remote:
-            return super(StorPoolDriver, self)._attach_volume(
-                context, volume, properties, remote=remote)
-        req_id = context.request_id
-        req = self._attach.get().get(req_id, None)
-        if req is None:
-            req = {
-                'volume': self._attach.volumeName(volume['id']),
-                'type': 'cinder-attach',
-                'id': context.request_id,
-                'rights': 2,
-                'volsnap': False,
-                'remove_on_detach': True
-            }
-            self._attach.add(req_id, req)
-        name = req['volume']
-        self._attach.sync(req_id, None)
-        return {'device': {'path': '/dev/storpool/' + name,
-                'storpool_attach_req': req_id}}, volume
-
-    def _detach_volume(self, context, attach_info, volume, properties,
-                       force=False, remote=False, ignore_errors=False):
-        if remote:
-            return super(StorPoolDriver, self)._detach_volume(
-                context, attach_info, volume, properties,
-                force=force, remote=remote, ignore_errors=ignore_errors)
-        try:
-            req_id = attach_info.get('device', {}).get(
-                'storpool_attach_req', context.request_id)
-            req = self._attach.get()[req_id]
-            name = req['volume']
-            self._attach.sync(req_id, name)
-            if req.get('remove_on_detach', False):
-                self._attach.remove(req_id)
-        except BaseException:
-            if not ignore_errors:
-                raise
-
     def backup_volume(self, context, backup, backup_service):
         volume = self.db.volume_get(context, backup['volume_id'])
         req_id = context.request_id
diff --git a/releasenotes/notes/bug-1939241-storpool-attach-encrypted-volumes-783c723683b8f9a9.yaml b/releasenotes/notes/bug-1939241-storpool-attach-encrypted-volumes-783c723683b8f9a9.yaml
new file mode 100644
index 000000000..b19904041
--- /dev/null
+++ b/releasenotes/notes/bug-1939241-storpool-attach-encrypted-volumes-783c723683b8f9a9.yaml
@@ -0,0 +1,7 @@
+---
+fixes:
+  - |
+    StorPool driver `bug #1939241
+    <https://bugs.launchpad.net/cinder/+bug/1939241>`_: Fixed the creation of
+    encrypted StorPool volumes by dropping the needlessly and incompletely
+    overridden `_attach_volume()` and `_detach_volume()` methods.
-- 
2.39.2

