summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-03-02 07:37:07 +0000
committerGerrit Code Review <review@openstack.org>2023-03-02 07:37:07 +0000
commit986e75acaead9eb73f90ee5e4eb6f40ba410795f (patch)
treecc5d0bf45c217974091c1b586c311059a996f00b
parent2a90eadc0d20cef9833a0e7737f5c36becf46b3b (diff)
parent7f5576d3e6ccdd26da631e039984188bbc6a3705 (diff)
downloadswift-986e75acaead9eb73f90ee5e4eb6f40ba410795f.tar.gz
Merge "ring-builder: require part_power>=0, give better error messages"
-rw-r--r--swift/cli/ringbuilder.py6
-rw-r--r--swift/common/ring/builder.py3
-rw-r--r--test/unit/common/ring/test_builder.py6
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: