Basic ring builder validation.
This prevents people from creating bogus ring builder files. Example: "swift-ring-builder object.builder create 33 0.9 -4". Fixes bug 924577. Change-Id: I7bfc04f7fa5f55f70a4eaae96c414f6b2872e283
This commit is contained in:
parent
c2f8f00a3e
commit
d42a78a3aa
@ -39,12 +39,22 @@ class RingBuilder(object):
|
||||
a rebalance request is an isolated request or due to added, changed, or
|
||||
removed devices.
|
||||
|
||||
:param part_power: number of partitions = 2**part_power
|
||||
:param part_power: number of partitions = 2**part_power.
|
||||
:param replicas: number of replicas for each partition
|
||||
:param min_part_hours: minimum number of hours between partition changes
|
||||
"""
|
||||
|
||||
def __init__(self, part_power, replicas, min_part_hours):
|
||||
if part_power > 32:
|
||||
raise ValueError("part_power must be at most 32 (was %d)"
|
||||
% (part_power,))
|
||||
if replicas < 1:
|
||||
raise ValueError("replicas must be at least 1 (was %.6f)"
|
||||
% (replicas,))
|
||||
if min_part_hours < 0:
|
||||
raise ValueError("min_part_hours must be non-negative (was %d)"
|
||||
% (min_part_hours,))
|
||||
|
||||
self.part_power = part_power
|
||||
self.replicas = replicas
|
||||
self.min_part_hours = min_part_hours
|
||||
|
@ -47,6 +47,18 @@ class TestRingBuilder(unittest.TestCase):
|
||||
self.assertEquals(rb.devs_changed, False)
|
||||
self.assertEquals(rb.version, 0)
|
||||
|
||||
def test_overlarge_part_powers(self):
|
||||
ring.RingBuilder(32, 3, 1) # passes by not crashing
|
||||
self.assertRaises(ValueError, ring.RingBuilder, 33, 3, 1)
|
||||
|
||||
def test_insufficient_replicas(self):
|
||||
ring.RingBuilder(8, 1.0, 1) # passes by not crashing
|
||||
self.assertRaises(ValueError, ring.RingBuilder, 8, 0.999, 1)
|
||||
|
||||
def test_negative_min_part_hours(self):
|
||||
ring.RingBuilder(8, 3, 0) # passes by not crashing
|
||||
self.assertRaises(ValueError, ring.RingBuilder, 8, 3, -1)
|
||||
|
||||
def test_get_ring(self):
|
||||
rb = ring.RingBuilder(8, 3, 1)
|
||||
rb.add_dev({'id': 0, 'region': 0, 'zone': 0, 'weight': 1,
|
||||
|
Loading…
Reference in New Issue
Block a user