Handle scaling up in scaling library next_batch() function

Handle the case where targ_capacity > curr_capacity.

Change-Id: I53d6f51a3ff0f7e813720e28f9decfc8ef118a89
Partially-Implements: blueprint scaling-group-common
This commit is contained in:
Zane Bitter 2015-08-28 23:28:03 -04:00 committed by Steve Baker
parent 9a6f252574
commit 7fb7d765be
2 changed files with 72 additions and 6 deletions

View File

@ -36,13 +36,13 @@ def next_batch(targ_capacity, curr_capacity, num_up_to_date, batch_size,
update.
"""
efft_min_sz = min(min_in_service, targ_capacity)
assert num_up_to_date <= curr_capacity
efft_min_sz = min(min_in_service, targ_capacity, curr_capacity)
efft_bat_sz = min(batch_size, max(targ_capacity - num_up_to_date, 0))
if num_up_to_date >= efft_min_sz:
new_capacity = targ_capacity
else:
new_capacity = max(targ_capacity - efft_bat_sz,
efft_min_sz) + efft_bat_sz
new_capacity = efft_bat_sz + max(min(curr_capacity,
targ_capacity - efft_bat_sz),
efft_min_sz)
return new_capacity, efft_bat_sz

View File

@ -120,6 +120,72 @@ class TestNextBatch(common.HeatTestCase):
batch=(8, 4))),
('4_4_4_5_6', dict(targ=4, curr=4, updated=4, bat_size=5, min_srv=6,
batch=(4, 0))),
('6_4_0_1_0', dict(targ=6, curr=4, updated=0, bat_size=1, min_srv=0,
batch=(5, 1))),
('6_5_1_1_0', dict(targ=6, curr=5, updated=1, bat_size=1, min_srv=0,
batch=(6, 1))),
('6_4_0_1_4', dict(targ=6, curr=4, updated=0, bat_size=1, min_srv=4,
batch=(5, 1))),
('6_5_1_1_4', dict(targ=6, curr=5, updated=1, bat_size=1, min_srv=4,
batch=(6, 1))),
('6_4_0_2_0', dict(targ=6, curr=4, updated=0, bat_size=2, min_srv=0,
batch=(6, 2))),
('6_4_0_2_4', dict(targ=6, curr=4, updated=0, bat_size=2, min_srv=4,
batch=(6, 2))),
('6_5_0_2_0', dict(targ=6, curr=5, updated=0, bat_size=2, min_srv=0,
batch=(6, 2))),
('6_5_0_2_4', dict(targ=6, curr=5, updated=0, bat_size=2, min_srv=4,
batch=(6, 2))),
('6_3_0_2_0', dict(targ=6, curr=3, updated=0, bat_size=2, min_srv=0,
batch=(5, 2))),
('6_5_2_2_0', dict(targ=6, curr=5, updated=2, bat_size=2, min_srv=0,
batch=(6, 2))),
('6_5_4_2_0', dict(targ=6, curr=5, updated=4, bat_size=2, min_srv=0,
batch=(6, 2))),
('6_3_0_2_4', dict(targ=6, curr=3, updated=0, bat_size=2, min_srv=4,
batch=(5, 2))),
('6_5_2_2_4', dict(targ=6, curr=5, updated=2, bat_size=2, min_srv=4,
batch=(6, 2))),
('6_5_4_2_4', dict(targ=6, curr=5, updated=4, bat_size=2, min_srv=4,
batch=(6, 2))),
('6_4_0_4_0', dict(targ=6, curr=4, updated=0, bat_size=4, min_srv=0,
batch=(6, 4))),
('6_4_4_4_0', dict(targ=6, curr=4, updated=4, bat_size=4, min_srv=0,
batch=(6, 2))),
('6_4_0_5_0', dict(targ=6, curr=4, updated=0, bat_size=5, min_srv=0,
batch=(6, 5))),
('6_6_5_4_0', dict(targ=6, curr=6, updated=5, bat_size=4, min_srv=0,
batch=(6, 1))),
('6_4_0_4_1', dict(targ=6, curr=4, updated=0, bat_size=4, min_srv=1,
batch=(6, 4))),
('6_6_4_4_1', dict(targ=6, curr=6, updated=4, bat_size=4, min_srv=1,
batch=(6, 2))),
('6_4_0_6_1', dict(targ=6, curr=4, updated=0, bat_size=6, min_srv=1,
batch=(7, 6))),
('6_7_5_6_1', dict(targ=6, curr=7, updated=5, bat_size=6, min_srv=1,
batch=(6, 1))),
('6_4_0_4_2', dict(targ=6, curr=4, updated=0, bat_size=4, min_srv=2,
batch=(6, 4))),
('6_4_4_4_2', dict(targ=6, curr=4, updated=4, bat_size=4, min_srv=2,
batch=(6, 2))),
('6_4_0_4_4', dict(targ=6, curr=4, updated=0, bat_size=4, min_srv=4,
batch=(8, 4))),
('6_8_4_4_4', dict(targ=6, curr=4, updated=4, bat_size=4, min_srv=4,
batch=(6, 2))),
('6_8_2_4_4', dict(targ=6, curr=8, updated=2, bat_size=4, min_srv=4,
batch=(8, 4))),
('6_8_6_4_4', dict(targ=6, curr=8, updated=6, bat_size=4, min_srv=4,
batch=(6, 0))),
('6_4_0_5_6', dict(targ=6, curr=4, updated=0, bat_size=5, min_srv=6,
batch=(9, 5))),
('6_9_5_5_6', dict(targ=6, curr=9, updated=5, bat_size=5, min_srv=6,
batch=(7, 1))),
('6_9_2_5_6', dict(targ=6, curr=9, updated=2, bat_size=5, min_srv=6,
batch=(10, 4))),
('6_A_5_5_6', dict(targ=6, curr=10, updated=5, bat_size=5, min_srv=6,
batch=(7, 1))),
('6_7_6_5_6', dict(targ=6, curr=7, updated=6, bat_size=5, min_srv=6,
batch=(6, 0))),
]
def test_next_batch(self):