From 2e20e70e1430b1f05a98616ba47464829e764390 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 1 Oct 2015 18:04:30 +0200 Subject: [PATCH] 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 --- cinder/volume/throttling.py | 2 +- tox.ini | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cinder/volume/throttling.py b/cinder/volume/throttling.py index 21c19956e16..b8ce5705ab0 100644 --- a/cinder/volume/throttling.py +++ b/cinder/volume/throttling.py @@ -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') diff --git a/tox.ini b/tox.ini index 720d1449275..d86012f2008 100644 --- a/tox.ini +++ b/tox.ini @@ -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 \