diff --git a/cinder/volume/drivers/rbd.py b/cinder/volume/drivers/rbd.py index 5b868e4fefc..9e312f2b41f 100644 --- a/cinder/volume/drivers/rbd.py +++ b/cinder/volume/drivers/rbd.py @@ -76,7 +76,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).'), @@ -656,12 +658,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): @@ -731,7 +727,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", diff --git a/releasenotes/notes/bug-1901241-361b1b361bfa5152.yaml b/releasenotes/notes/bug-1901241-361b1b361bfa5152.yaml new file mode 100644 index 00000000000..7609cfe9dfc --- /dev/null +++ b/releasenotes/notes/bug-1901241-361b1b361bfa5152.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + RBD driver `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.