Merge "RBD: Skip update_features when features = 0"

This commit is contained in:
Zuul 2023-04-20 16:02:50 +00:00 committed by Gerrit Code Review
commit 45d0947adb
3 changed files with 33 additions and 2 deletions

View File

@ -3361,6 +3361,17 @@ class RBDTestCase(test.TestCase):
{'provider_location':
"{\"saved_features\":%s}" % image_features}, ret)
@common_mocks
def test_enable_multiattach_no_features(self):
image = self.mock_proxy.return_value.__enter__.return_value
image.features.return_value = 0
ret = self.driver._enable_multiattach(self.volume_a)
image.update_features.assert_not_called()
self.assertEqual({'provider_location': '{"saved_features":0}'}, ret)
@ddt.data(MULTIATTACH_FULL_FEATURES, MULTIATTACH_REDUCED_FEATURES)
@common_mocks
def test_disable_multiattach(self, features):
@ -3374,6 +3385,18 @@ class RBDTestCase(test.TestCase):
self.assertEqual({'provider_location': None}, ret)
@common_mocks
def test_disable_multiattach_no_features(self):
image = self.mock_proxy.return_value.__enter__.return_value
self.volume_a.provider_location = '{"saved_features": 0}'
image.features.return_value = 0
ret = self.driver._disable_multiattach(self.volume_a)
image.update_features.assert_not_called()
self.assertEqual({'provider_location': None}, ret)
class ManagedRBDTestCase(test_driver.BaseDriverTestCase):
driver_name = "cinder.volume.drivers.rbd.RBDDriver"

View File

@ -968,7 +968,8 @@ class RBDDriver(driver.CloneableImageVD, driver.MigrateVD,
with RBDVolumeProxy(self, vol_name) as image:
image_features = image.features()
change_features = self.MULTIATTACH_EXCLUSIONS & image_features
image.update_features(change_features, False)
if change_features != 0:
image.update_features(change_features, False)
return {'provider_location':
self._dumps({'saved_features': image_features})}
@ -980,7 +981,8 @@ class RBDDriver(driver.CloneableImageVD, driver.MigrateVD,
provider_location = json.loads(volume.provider_location)
image_features = provider_location['saved_features']
change_features = self.MULTIATTACH_EXCLUSIONS & image_features
image.update_features(change_features, True)
if change_features != 0:
image.update_features(change_features, True)
except IndexError:
msg = "Could not find saved image features."
raise RBDDriverException(reason=msg)

View File

@ -0,0 +1,6 @@
---
fixes:
- |
`Bug #1997980 <https://bugs.launchpad.net/cinder/+bug/1997980>`_: RBD:
Fixed failure to update rbd image features for multi-attach when
features = 0.