ring-builder: require part_power>=0, give better error messages
Closes-Bug: #1697860 Change-Id: I500a86de390b24b9d08a478d695a7d62c447e779
This commit is contained in:
@@ -544,7 +544,11 @@ swift-ring-builder <builder_file> create <part_power> <replicas>
|
|||||||
if len(argv) < 6:
|
if len(argv) < 6:
|
||||||
print(Commands.create.__doc__.strip())
|
print(Commands.create.__doc__.strip())
|
||||||
exit(EXIT_ERROR)
|
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')
|
backup_dir = pathjoin(dirname(builder_file), 'backups')
|
||||||
try:
|
try:
|
||||||
mkdir(backup_dir)
|
mkdir(backup_dir)
|
||||||
|
|||||||
@@ -87,6 +87,9 @@ class RingBuilder(object):
|
|||||||
if part_power > 32:
|
if part_power > 32:
|
||||||
raise ValueError("part_power must be at most 32 (was %d)"
|
raise ValueError("part_power must be at most 32 (was %d)"
|
||||||
% (part_power,))
|
% (part_power,))
|
||||||
|
if part_power < 0:
|
||||||
|
raise ValueError("part_power must be at least 0 (was %d)"
|
||||||
|
% (part_power,))
|
||||||
if replicas < 1:
|
if replicas < 1:
|
||||||
raise ValueError("replicas must be at least 1 (was %.6f)"
|
raise ValueError("replicas must be at least 1 (was %.6f)"
|
||||||
% (replicas,))
|
% (replicas,))
|
||||||
|
|||||||
@@ -85,6 +85,12 @@ class TestRingBuilder(unittest.TestCase):
|
|||||||
ring.RingBuilder(33, 3, 1)
|
ring.RingBuilder(33, 3, 1)
|
||||||
self.assertEqual(str(ctx.exception), expected_msg)
|
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):
|
def test_insufficient_replicas(self):
|
||||||
expected_msg = 'replicas must be at least 1 (was 0.999000)'
|
expected_msg = 'replicas must be at least 1 (was 0.999000)'
|
||||||
with self.assertRaises(ValueError) as ctx:
|
with self.assertRaises(ValueError) as ctx:
|
||||||
|
|||||||
Reference in New Issue
Block a user