add test for zero weight region get_more_nodes

Change-Id: If537981e8deadd9c3528dcb30a15011c7781e334
This commit is contained in:
Clay Gerrard 2016-01-15 11:44:21 -08:00
parent 3c0cf549f1
commit 165fa1fd40

@ -24,10 +24,12 @@ from gzip import GzipFile
from tempfile import mkdtemp
from shutil import rmtree
from time import sleep, time
import random
from six.moves import range
from swift.common import ring, utils
from swift.common.ring import utils as ring_utils
class TestRingBase(unittest.TestCase):
@ -822,6 +824,69 @@ class TestRing(TestRingBase):
'handoff differs at position %d\n%s\n%s' % (
index, dev_ids[index:], exp_handoffs[index:]))
def test_get_more_nodes_with_zero_weight_region(self):
rb = ring.RingBuilder(8, 3, 1)
devs = [
ring_utils.parse_add_value(v) for v in [
'r1z1-127.0.0.1:6000/d1',
'r1z1-127.0.0.1:6001/d2',
'r1z1-127.0.0.1:6002/d3',
'r1z1-127.0.0.1:6003/d4',
'r1z2-127.0.0.2:6000/d1',
'r1z2-127.0.0.2:6001/d2',
'r1z2-127.0.0.2:6002/d3',
'r1z2-127.0.0.2:6003/d4',
'r2z1-127.0.1.1:6000/d1',
'r2z1-127.0.1.1:6001/d2',
'r2z1-127.0.1.1:6002/d3',
'r2z1-127.0.1.1:6003/d4',
'r2z2-127.0.1.2:6000/d1',
'r2z2-127.0.1.2:6001/d2',
'r2z2-127.0.1.2:6002/d3',
'r2z2-127.0.1.2:6003/d4',
]
]
for dev in devs:
if dev['region'] == 2:
dev['weight'] = 0.0
else:
dev['weight'] = 1.0
rb.add_dev(dev)
rb.rebalance(seed=1)
rb.get_ring().save(self.testgz)
r = ring.Ring(self.testdir, ring_name='whatever')
class CountingRingTable(object):
def __init__(self, table):
self.table = table
self.count = 0
def __iter__(self):
self._iter = iter(self.table)
return self
def __next__(self):
self.count += 1
return next(self._iter)
# complete the api
next = __next__
def __getitem__(self, key):
return self.table[key]
counting_table = CountingRingTable(r._replica2part2dev_id)
r._replica2part2dev_id = counting_table
part = random.randint(0, r.partition_count)
node_iter = r.get_more_nodes(part)
next(node_iter)
self.assertEqual(5, counting_table.count)
# sanity
self.assertEqual(1, r._num_regions)
self.assertEqual(2, r._num_zones)
if __name__ == '__main__':
unittest.main()