diff options
author | Clay Gerrard <clay.gerrard@gmail.com> | 2015-01-27 10:19:41 -0800 |
---|---|---|
committer | Clay Gerrard <clay.gerrard@gmail.com> | 2015-01-27 10:19:41 -0800 |
commit | 376dc5adc381f769091f29c75d9b26493383bac6 (patch) | |
tree | 6edb634c1660f303ebb84173f71b6931d1c6ede1 | |
parent | ecf4d057b30befbc8d6bd48a311ebc67d4278648 (diff) | |
download | swift-376dc5adc381f769091f29c75d9b26493383bac6.tar.gz |
don't print cached dispersion if it's a lie
Change-Id: I551fcaf274876861feb12848749590f220842d68
-rwxr-xr-x | swift/cli/ringbuilder.py | 8 | ||||
-rw-r--r-- | swift/common/ring/builder.py | 2 | ||||
-rw-r--r-- | test/unit/cli/test_ringbuilder.py | 22 |
3 files changed, 28 insertions, 4 deletions
diff --git a/swift/cli/ringbuilder.py b/swift/cli/ringbuilder.py index 3bf073550..65ad12e51 100755 --- a/swift/cli/ringbuilder.py +++ b/swift/cli/ringbuilder.py @@ -248,10 +248,12 @@ swift-ring-builder <builder_file> dev_count = len([dev for dev in builder.devs if dev is not None]) balance = builder.get_balance() + dispersion_trailer = '' if builder.dispersion is None else ( + ', %.02f dispersion' % (builder.dispersion)) print '%d partitions, %.6f replicas, %d regions, %d zones, ' \ - '%d devices, %.02f balance, %.02f dispersion' % ( + '%d devices, %.02f balance%s' % ( builder.parts, builder.replicas, regions, zones, dev_count, - balance, builder.dispersion) + balance, dispersion_trailer) print 'The minimum number of hours before a partition can be ' \ 'reassigned is %s' % builder.min_part_hours print 'The overload factor is %.6f' % builder.overload @@ -637,7 +639,7 @@ swift-ring-builder <builder_file> rebalance [options] ) print '-' * 79 exit(EXIT_ERROR) - if not parts: + if not (parts or options.force): print 'No partitions could be reassigned.' print 'Either none need to be or none can be due to ' \ 'min_part_hours [%s].' % builder.min_part_hours diff --git a/swift/common/ring/builder.py b/swift/common/ring/builder.py index 11324ec43..a0d0d5200 100644 --- a/swift/common/ring/builder.py +++ b/swift/common/ring/builder.py @@ -147,7 +147,7 @@ class RingBuilder(object): self._last_part_moves = builder['_last_part_moves'] self._last_part_gather_start = builder['_last_part_gather_start'] self._dispersion_graph = builder.get('_dispersion_graph', {}) - self.dispersion = builder.get('dispersion', 0.0) + self.dispersion = builder.get('dispersion') self._remove_devs = builder['_remove_devs'] self._ring = None diff --git a/test/unit/cli/test_ringbuilder.py b/test/unit/cli/test_ringbuilder.py index 2fb231f9d..82abeb954 100644 --- a/test/unit/cli/test_ringbuilder.py +++ b/test/unit/cli/test_ringbuilder.py @@ -381,6 +381,28 @@ class TestRebalanceCommand(unittest.TestCase): out, err = self.run_srb("rebalance") self.assertTrue("rebalance/repush" in out) + def test_cached_dispersion_value(self): + self.run_srb("create", 8, 3, 24) + self.run_srb("add", + "r1z1-10.1.1.1:2345/sda", 100.0, + "r1z1-10.1.1.1:2345/sdb", 100.0, + "r1z1-10.1.1.1:2345/sdc", 100.0, + "r1z1-10.1.1.1:2345/sdd", 100.0) + self.run_srb('rebalance') + out, err = self.run_srb() # list devices + self.assertTrue('dispersion' in out) + # remove cached dispersion value + builder = RingBuilder.load(self.tempfile) + builder.dispersion = None + builder.save(self.tempfile) + # now dispersion output is supressed + out, err = self.run_srb() # list devices + self.assertFalse('dispersion' in out) + # but will show up after rebalance + self.run_srb('rebalance', '-f') + out, err = self.run_srb() # list devices + self.assertTrue('dispersion' in out) + if __name__ == '__main__': unittest.main() |