Do not fail when depth is greater than rbd_max_clone_depth

Removed a sanity check in the code that raised an exception
if the clone depth of a volume to be cloned exceeded the
rbd_max_clone_depth config value.  A consequence of this
check was that if an operator lowered the value, volumes
whose clone depth was greater than the new value (as would
be allowed by the previous, higher setting) could no longer
be cloned.

Change-Id: I8c445058a25c2eca2fda91bdeb6befedae34ccf2
Closes-bug: #1901241
(cherry picked from commit 8d8d242c39)
(cherry picked from commit 23a821b2a4)
(cherry picked from commit f6e5fe187e)
(cherry picked from commit 0a3345cc05)
This commit is contained in:
David Hill 2020-10-22 18:56:19 -04:00 committed by Luigi Toscano
parent 463c17a3f9
commit 66aad39a44
2 changed files with 12 additions and 8 deletions

View File

@ -83,7 +83,9 @@ RBD_OPTS = [
default=5,
help='Maximum number of nested volume clones that are '
'taken before a flatten occurs. Set to 0 to disable '
'cloning.'),
'cloning. Note: lowering this value will not affect '
'existing volumes whose clone depth exceeds the new '
'value.'),
cfg.IntOpt('rbd_store_chunk_size', default=4,
help='Volumes will be chunked into objects of this size '
'(in megabytes).'),
@ -607,12 +609,6 @@ class RBDDriver(driver.CloneableImageVD, driver.MigrateVD,
if not parent:
return depth
# If clone depth was reached, flatten should have occurred so if it has
# been exceeded then something has gone wrong.
if depth > self.configuration.rbd_max_clone_depth:
raise Exception(_("clone depth exceeds limit of %s") %
(self.configuration.rbd_max_clone_depth))
return self._get_clone_depth(client, parent, depth + 1)
def _extend_if_required(self, volume, src_vref):
@ -682,7 +678,7 @@ class RBDDriver(driver.CloneableImageVD, driver.MigrateVD,
depth = self._get_clone_depth(client, src_name)
# If dest volume is a clone and rbd_max_clone_depth reached,
# flatten the dest after cloning. Zero rbd_max_clone_depth means
# infinite is allowed.
# volumes are always flattened.
if depth >= self.configuration.rbd_max_clone_depth:
LOG.info("maximum clone depth (%d) has been reached - "
"flattening dest volume",

View File

@ -0,0 +1,8 @@
---
fixes:
- |
RBD driver `bug #1901241
<https://bugs.launchpad.net/cinder/+bug/1901241>`_:
Fixed an issue where decreasing the ``rbd_max_clone_depth`` configuration
option would prevent volumes that had already exceeded that depth from
being cloned.