diff options
author | Zuul <zuul@review.opendev.org> | 2023-03-02 07:37:07 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2023-03-02 07:37:07 +0000 |
commit | 986e75acaead9eb73f90ee5e4eb6f40ba410795f (patch) | |
tree | cc5d0bf45c217974091c1b586c311059a996f00b | |
parent | 2a90eadc0d20cef9833a0e7737f5c36becf46b3b (diff) | |
parent | 7f5576d3e6ccdd26da631e039984188bbc6a3705 (diff) | |
download | swift-986e75acaead9eb73f90ee5e4eb6f40ba410795f.tar.gz |
Merge "ring-builder: require part_power>=0, give better error messages"
-rw-r--r-- | swift/cli/ringbuilder.py | 6 | ||||
-rw-r--r-- | swift/common/ring/builder.py | 3 | ||||
-rw-r--r-- | test/unit/common/ring/test_builder.py | 6 |
3 files changed, 14 insertions, 1 deletions
diff --git a/swift/cli/ringbuilder.py b/swift/cli/ringbuilder.py index 5ab6a6f3a..001919d52 100644 --- a/swift/cli/ringbuilder.py +++ b/swift/cli/ringbuilder.py @@ -544,7 +544,11 @@ swift-ring-builder <builder_file> create <part_power> <replicas> if len(argv) < 6: print(Commands.create.__doc__.strip()) exit(EXIT_ERROR) - builder = RingBuilder(int(argv[3]), float(argv[4]), int(argv[5])) + try: + builder = RingBuilder(int(argv[3]), float(argv[4]), int(argv[5])) + except ValueError as e: + print(e) + exit(EXIT_ERROR) backup_dir = pathjoin(dirname(builder_file), 'backups') try: mkdir(backup_dir) diff --git a/swift/common/ring/builder.py b/swift/common/ring/builder.py index e64fe4089..91845070e 100644 --- a/swift/common/ring/builder.py +++ b/swift/common/ring/builder.py @@ -87,6 +87,9 @@ class RingBuilder(object): if part_power > 32: raise ValueError("part_power must be at most 32 (was %d)" % (part_power,)) + if part_power < 0: + raise ValueError("part_power must be at least 0 (was %d)" + % (part_power,)) if replicas < 1: raise ValueError("replicas must be at least 1 (was %.6f)" % (replicas,)) diff --git a/test/unit/common/ring/test_builder.py b/test/unit/common/ring/test_builder.py index 74e8acaae..e1b57be9e 100644 --- a/test/unit/common/ring/test_builder.py +++ b/test/unit/common/ring/test_builder.py @@ -85,6 +85,12 @@ class TestRingBuilder(unittest.TestCase): ring.RingBuilder(33, 3, 1) self.assertEqual(str(ctx.exception), expected_msg) + def test_oversmall_part_powers(self): + expected_msg = 'part_power must be at least 0 (was -1)' + with self.assertRaises(ValueError) as ctx: + ring.RingBuilder(-1, 3, 1) + self.assertEqual(str(ctx.exception), expected_msg) + def test_insufficient_replicas(self): expected_msg = 'replicas must be at least 1 (was 0.999000)' with self.assertRaises(ValueError) as ctx: |