mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-16 20:08:09 +00:00
Bug fixes for Pool Resize (#158)
This commit is contained in:
@ -80,12 +80,31 @@ def scale_up(pool: Pool, scalesets: List[Scaleset], nodes_needed: int) -> None:
|
|||||||
def scale_down(scalesets: List[Scaleset], nodes_to_remove: int) -> None:
|
def scale_down(scalesets: List[Scaleset], nodes_to_remove: int) -> None:
|
||||||
logging.info("Scaling down")
|
logging.info("Scaling down")
|
||||||
for scaleset in scalesets:
|
for scaleset in scalesets:
|
||||||
nodes = Node.search_states(
|
num_of_nodes = len(Node.search_states(scaleset_id=scaleset.scaleset_id))
|
||||||
scaleset_id=scaleset.scaleset_id, states=[NodeState.free]
|
if scaleset.size != num_of_nodes and scaleset.state not in [
|
||||||
|
ScalesetState.resize,
|
||||||
|
ScalesetState.shutdown,
|
||||||
|
ScalesetState.halt,
|
||||||
|
]:
|
||||||
|
scaleset.state = ScalesetState.resize
|
||||||
|
scaleset.save()
|
||||||
|
|
||||||
|
free_nodes = Node.search_states(
|
||||||
|
scaleset_id=scaleset.scaleset_id,
|
||||||
|
states=[NodeState.free],
|
||||||
)
|
)
|
||||||
|
nodes = []
|
||||||
|
for node in free_nodes:
|
||||||
|
if not node.delete_requested:
|
||||||
|
nodes.append(node)
|
||||||
|
logging.info(
|
||||||
|
"Scaleset: %s, #Free Nodes: %s" % (scaleset.scaleset_id, len(nodes))
|
||||||
|
)
|
||||||
|
|
||||||
if nodes and nodes_to_remove > 0:
|
if nodes and nodes_to_remove > 0:
|
||||||
max_nodes_remove = min(len(nodes), nodes_to_remove)
|
max_nodes_remove = min(len(nodes), nodes_to_remove)
|
||||||
if max_nodes_remove >= scaleset.size and len(nodes) == scaleset.size:
|
# All nodes in scaleset are free. Can shutdown VMSS
|
||||||
|
if max_nodes_remove >= scaleset.size and len(nodes) >= scaleset.size:
|
||||||
scaleset.state = ScalesetState.shutdown
|
scaleset.state = ScalesetState.shutdown
|
||||||
nodes_to_remove = nodes_to_remove - scaleset.size
|
nodes_to_remove = nodes_to_remove - scaleset.size
|
||||||
scaleset.save()
|
scaleset.save()
|
||||||
@ -93,6 +112,7 @@ def scale_down(scalesets: List[Scaleset], nodes_to_remove: int) -> None:
|
|||||||
node.set_shutdown()
|
node.set_shutdown()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# Resize of VMSS needed
|
||||||
scaleset.size = scaleset.size - max_nodes_remove
|
scaleset.size = scaleset.size - max_nodes_remove
|
||||||
nodes_to_remove = nodes_to_remove - max_nodes_remove
|
nodes_to_remove = nodes_to_remove - max_nodes_remove
|
||||||
scaleset.state = ScalesetState.resize
|
scaleset.state = ScalesetState.resize
|
||||||
@ -145,4 +165,10 @@ def autoscale_pool(pool: Pool) -> None:
|
|||||||
# resizing scaleset or creating new scaleset.
|
# resizing scaleset or creating new scaleset.
|
||||||
scale_up(pool, scalesets, nodes_needed)
|
scale_up(pool, scalesets, nodes_needed)
|
||||||
elif nodes_needed < 0:
|
elif nodes_needed < 0:
|
||||||
|
for scaleset in scalesets:
|
||||||
|
nodes = Node.search_states(scaleset_id=scaleset.scaleset_id)
|
||||||
|
for node in nodes:
|
||||||
|
if node.delete_requested:
|
||||||
|
nodes_needed += 1
|
||||||
|
if nodes_needed < 0:
|
||||||
scale_down(scalesets, abs(nodes_needed))
|
scale_down(scalesets, abs(nodes_needed))
|
||||||
|
Reference in New Issue
Block a user