Fix state mutation in cells image filter
Stop set pop() operations in the cells ImagePropertiesFilter from mutating capability state. This causes a race that can break the filter between requests. Closes-Bug #1325705 Change-Id: I901e39046a38ab60c23ddc8762ef5d19a297935b
This commit is contained in:
parent
338c3551ab
commit
9b45d7e294
|
@ -54,7 +54,10 @@ class ImagePropertiesFilter(filters.BaseCellFilter):
|
|||
filtered_cells = []
|
||||
for cell in cells:
|
||||
version = cell.capabilities.get('prominent_hypervisor_version')
|
||||
version = version and str(version.pop())
|
||||
if version:
|
||||
l = list(version)
|
||||
version = str(l[0])
|
||||
|
||||
if version is None or self._matches_version(version,
|
||||
hypervisor_version_requires):
|
||||
filtered_cells.append(cell)
|
||||
|
|
|
@ -75,7 +75,7 @@ class ImagePropertiesFilter(_FilterTestClass):
|
|||
def test_missing_hypervisor_version_requires(self):
|
||||
self.filter_props['request_spec'] = {'image': {'properties': {}}}
|
||||
for cell in self.cells:
|
||||
cell.capabilities = {"prominent_hypervisor_version": [u"6.2"]}
|
||||
cell.capabilities = {"prominent_hypervisor_version": set([u"6.2"])}
|
||||
self.assertEqual(self.cells,
|
||||
self._filter_cells(self.cells, self.filter_props))
|
||||
|
||||
|
@ -89,13 +89,21 @@ class ImagePropertiesFilter(_FilterTestClass):
|
|||
image = {'properties': {'hypervisor_version_requires': '>6.0, <=6.3'}}
|
||||
self.filter_props['request_spec'] = {'image': image}
|
||||
|
||||
self.cell1.capabilities = {"prominent_hypervisor_version": [u"6.2"]}
|
||||
self.cell2.capabilities = {"prominent_hypervisor_version": [u"6.3"]}
|
||||
self.cell3.capabilities = {"prominent_hypervisor_version": [u"6.0"]}
|
||||
self.cell1.capabilities = {"prominent_hypervisor_version":
|
||||
set([u"6.2"])}
|
||||
self.cell2.capabilities = {"prominent_hypervisor_version":
|
||||
set([u"6.3"])}
|
||||
self.cell3.capabilities = {"prominent_hypervisor_version":
|
||||
set([u"6.0"])}
|
||||
|
||||
self.assertEqual([self.cell1, self.cell2],
|
||||
self._filter_cells(self.cells, self.filter_props))
|
||||
|
||||
# assert again to verify filter doesn't mutate state
|
||||
# LP bug #1325705
|
||||
self.assertEqual([self.cell1, self.cell2],
|
||||
self._filter_cells(self.cells, self.filter_props))
|
||||
|
||||
|
||||
class TestTargetCellFilter(_FilterTestClass):
|
||||
filter_cls_name = 'nova.cells.filters.target_cell.TargetCellFilter'
|
||||
|
|
Loading…
Reference in New Issue