add test for zero weight region get_more_nodes
Change-Id: If537981e8deadd9c3528dcb30a15011c7781e334
This commit is contained in:
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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user