Update the StorPool CI Cinder patchset
Add the "fix the rename volume unit test API mock" patch.
Put the "improve clone_volume()" patch at the end where it belongs.
Refresh some of the patches.
Change-Id: I33f19ea5bd19ab711a50776535a52ea5824a4891
diff --git a/patches/openstack/cinder/sep-sp-clone-volume.patch b/patches/openstack/cinder/sep-sp-clone-volume.patch
index abe5bc5..cbf209e 100644
--- a/patches/openstack/cinder/sep-sp-clone-volume.patch
+++ b/patches/openstack/cinder/sep-sp-clone-volume.patch
@@ -29,8 +29,6 @@
4 files changed, 208 insertions(+), 34 deletions(-)
create mode 100644 releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
-diff --git a/cinder/tests/unit/volume/drivers/test_storpool.py b/cinder/tests/unit/volume/drivers/test_storpool.py
-index 2e6f56526..65d4ed304 100644
--- a/cinder/tests/unit/volume/drivers/test_storpool.py
+++ b/cinder/tests/unit/volume/drivers/test_storpool.py
@@ -14,6 +14,7 @@
@@ -41,7 +39,7 @@
import re
import sys
from unittest import mock
-@@ -110,13 +111,33 @@ class MockAPI(object):
+@@ -110,13 +111,33 @@
def snapshotCreate(self, vname, snap):
snapshots[snap['name']] = dict(volumes[vname])
@@ -77,7 +75,7 @@
def volumeDelete(self, name):
del volumes[name]
-@@ -171,6 +192,23 @@ fakeStorPool.spopenstack.AttachDB = MockAttachDB
+@@ -174,6 +195,23 @@
fakeStorPool.sptypes.VolumeUpdateDesc = MockVolumeUpdateDesc
@@ -101,9 +99,9 @@
@ddt.ddt
class StorPoolTestCase(test.TestCase):
-@@ -260,6 +298,11 @@ class StorPoolTestCase(test.TestCase):
+@@ -265,6 +303,11 @@
self.assertListEqual(sorted([volumeName(n) for n in names]),
- sorted(volumes.keys()))
+ sorted(data['name'] for data in volumes.values()))
+ def assertSnapshotNames(self, specs):
+ self.assertListEqual(
@@ -113,7 +111,7 @@
@mock_volume_types
def test_create_delete_volume(self):
self.assertVolumeNames([])
-@@ -272,7 +315,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -277,7 +320,7 @@
self.assertVolumeNames(('1',))
v = volumes[volumeName('1')]
self.assertEqual(1 * units.Gi, v['size'])
@@ -122,7 +120,7 @@
self.assertEqual(3, v['replication'])
caught = False
-@@ -292,7 +335,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -297,7 +340,7 @@
self.assertVolumeNames(('1',))
v = volumes[volumeName('1')]
self.assertEqual(2 * units.Gi, v['size'])
@@ -131,7 +129,7 @@
self.assertEqual(3, v['replication'])
self.driver.create_volume({'id': '2', 'name': 'v2', 'size': 3,
-@@ -300,7 +343,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -305,7 +348,7 @@
self.assertVolumeNames(('1', '2'))
v = volumes[volumeName('2')]
self.assertEqual(3 * units.Gi, v['size'])
@@ -140,7 +138,7 @@
self.assertEqual(3, v['replication'])
self.driver.create_volume({'id': '3', 'name': 'v2', 'size': 4,
-@@ -322,7 +365,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -327,7 +370,7 @@
# Make sure the dictionary is not corrupted somehow...
v = volumes[volumeName('1')]
self.assertEqual(2 * units.Gi, v['size'])
@@ -149,7 +147,7 @@
self.assertEqual(3, v['replication'])
for vid in ('1', '2', '3', '4'):
-@@ -386,16 +429,17 @@ class StorPoolTestCase(test.TestCase):
+@@ -395,16 +438,17 @@
self.driver.extend_volume({'id': '1'}, 2)
self.assertEqual(2 * units.Gi, volumes[volumeName('1')]['size'])
@@ -175,7 +173,7 @@
self.driver.delete_volume({'id': 1})
self.driver.delete_volume({'id': 2})
-@@ -403,6 +447,78 @@ class StorPoolTestCase(test.TestCase):
+@@ -412,6 +456,78 @@
self.assertDictEqual({}, volumes)
self.assertDictEqual({}, snapshots)
@@ -254,7 +252,7 @@
@mock_volume_types
def test_config_replication(self):
self.assertVolumeNames([])
-@@ -422,7 +538,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -431,7 +547,7 @@
self.assertVolumeNames(('cfgrepl1',))
v = volumes[volumeName('cfgrepl1')]
self.assertEqual(3, v['replication'])
@@ -263,7 +261,7 @@
self.driver.delete_volume({'id': 'cfgrepl1'})
self.driver.configuration.storpool_replication = 2
-@@ -436,7 +552,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -445,7 +561,7 @@
self.assertVolumeNames(('cfgrepl2',))
v = volumes[volumeName('cfgrepl2')]
self.assertEqual(2, v['replication'])
@@ -272,7 +270,7 @@
self.driver.delete_volume({'id': 'cfgrepl2'})
self.driver.create_volume({'id': 'cfgrepl3', 'name': 'v1', 'size': 1,
-@@ -468,7 +584,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -477,7 +593,7 @@
self.assertVolumeNames(('cfgtempl1',))
v = volumes[volumeName('cfgtempl1')]
self.assertEqual(3, v['replication'])
@@ -281,11 +279,9 @@
self.driver.delete_volume({'id': 'cfgtempl1'})
self.driver.create_volume({'id': 'cfgtempl2', 'name': 'v1', 'size': 1,
-diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py
-index cdaf0043d..418e5750f 100644
--- a/cinder/volume/drivers/storpool.py
+++ b/cinder/volume/drivers/storpool.py
-@@ -19,11 +19,13 @@ import platform
+@@ -19,11 +19,13 @@
from oslo_config import cfg
from oslo_log import log as logging
@@ -299,7 +295,7 @@
from cinder import exception
from cinder.i18n import _
from cinder import interface
-@@ -197,30 +199,80 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -197,30 +199,80 @@
def create_cloned_volume(self, volume, src_vref):
refname = self._attach.volumeName(src_vref['id'])
@@ -358,11 +354,7 @@
+ snapname,
+ {'template': template},
+ )
- except spapi.ApiError as e:
-- # ARGH!
-- LOG.error("Could not delete the temp snapshot %(name)s: "
-- "%(msg)s",
-- {'name': snapname, 'msg': e})
++ except spapi.ApiError as e:
+ raise self._backendException(e)
+
+ try:
@@ -379,7 +371,11 @@
+ snapname,
+ {'tags': {'transient': '1.0'}},
+ )
-+ except spapi.ApiError as e:
+ except spapi.ApiError as e:
+- # ARGH!
+- LOG.error("Could not delete the temp snapshot %(name)s: "
+- "%(msg)s",
+- {'name': snapname, 'msg': e})
+ raise self._backendException(e)
+ except Exception:
+ with excutils.save_and_reraise_exception():
@@ -396,11 +392,9 @@
def create_export(self, context, volume, connector):
pass
-diff --git a/driver-requirements.txt b/driver-requirements.txt
-index 0240e7e78..5b992df2e 100644
--- a/driver-requirements.txt
+++ b/driver-requirements.txt
-@@ -40,7 +40,7 @@ infi.dtypes.wwn # PSF
+@@ -41,7 +41,7 @@
infi.dtypes.iqn # PSF
# Storpool
@@ -409,9 +403,6 @@
storpool.spopenstack>=2.2.1 # Apache-2.0
# Datera
-diff --git a/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml b/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
-new file mode 100644
-index 000000000..180427d9e
--- /dev/null
+++ b/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
@@ -0,0 +1,6 @@
@@ -421,6 +412,3 @@
+ StorPool driver: improved the way volumes are clonsed into different
+ StorPool templates (exposed as Cinder storage pools) if requested,
+ eliminating some data duplication in the underlying StorPool cluster.
---
-2.35.1
-