Fix volume throttling to Python 3

BlkioCgroup._set_limits(): sort devices before iterating on them to
have a reliable behaviour.

The devs variable is a dictionary. On Python 3, the hash function is
now randomized, so iterating on a dictionary gives items in a random
order. Use sorted() to iterate on the list of sorted devices instead.

tox.ini: add cinder.tests.unit.test_volume_throttling to Python 3.

Blueprint cinder-python3
Partial-Bug: #1348818
Change-Id: Icf7141f772397c7ac08f0f1e21ad74cb86a06351
This commit is contained in:
Victor Stinner 2015-10-01 18:04:30 +02:00
parent 7f498b0d4a
commit 2e20e70e14
2 changed files with 2 additions and 1 deletions

View File

@ -90,7 +90,7 @@ class BlkioCgroup(Throttle):
def _set_limits(self, rw, devs):
total = sum(devs.values())
for dev in devs:
for dev in sorted(devs):
self._limit_bps(rw, dev, self.bps_limit * devs[dev] / total)
@utils.synchronized('BlkioCgroup')

View File

@ -103,6 +103,7 @@ commands =
cinder.tests.unit.test_volume_configuration \
cinder.tests.unit.test_volume_glance_metadata \
cinder.tests.unit.test_volume_rpcapi \
cinder.tests.unit.test_volume_throttling \
cinder.tests.unit.test_volume_transfer \
cinder.tests.unit.test_volume_types \
cinder.tests.unit.test_volume_types_extra_specs \