add EventScalesetResizeScheduled (#1047)

This commit is contained in:
bmc-msft
2021-07-07 14:15:26 -04:00
committed by GitHub
parent 7b2679a1ce
commit 52f83b5b26
7 changed files with 121 additions and 14 deletions

View File

@ -35,12 +35,11 @@ def scale_up(pool: Pool, scalesets: List[Scaleset], nodes_needed: int) -> None:
if scaleset.size < max_size:
current_size = scaleset.size
if nodes_needed <= max_size - current_size:
scaleset.size = current_size + nodes_needed
scaleset.set_size(current_size + nodes_needed)
nodes_needed = 0
else:
scaleset.size = max_size
scaleset.set_size(max_size)
nodes_needed = nodes_needed - (max_size - current_size)
scaleset.set_state(ScalesetState.resize)
else:
continue
@ -112,7 +111,7 @@ def scale_down(scalesets: List[Scaleset], nodes_to_remove: int) -> None:
continue
# Resize of VMSS needed
scaleset.size = scaleset.size - max_nodes_remove
scaleset.set_size(scaleset.size - max_nodes_remove)
nodes_to_remove = nodes_to_remove - max_nodes_remove
scaleset.set_state(ScalesetState.resize)

View File

@ -13,6 +13,7 @@ from onefuzztypes.events import (
EventScalesetCreated,
EventScalesetDeleted,
EventScalesetFailed,
EventScalesetResizeScheduled,
EventScalesetStateUpdated,
)
from onefuzztypes.models import Error
@ -472,6 +473,14 @@ class Scaleset(BASE_SCALESET, ORMMixin):
)
self.set_state(ScalesetState.resize)
def set_size(self, size: int) -> None:
# ensure we always stay within max_size boundaries
size = min(size, self.max_size())
if self.size != size:
self.size = size
self.set_state(ScalesetState.resize)
self.save()
def resize(self) -> None:
# no longer needing to resize
if self.state != ScalesetState.resize:
@ -780,8 +789,19 @@ class Scaleset(BASE_SCALESET, ORMMixin):
self.state = state
self.save()
send_event(
EventScalesetStateUpdated(
scaleset_id=self.scaleset_id, pool_name=self.pool_name, state=self.state
if self.state == ScalesetState.resize:
send_event(
EventScalesetResizeScheduled(
scaleset_id=self.scaleset_id,
pool_name=self.pool_name,
size=self.size,
)
)
else:
send_event(
EventScalesetStateUpdated(
scaleset_id=self.scaleset_id,
pool_name=self.pool_name,
state=self.state,
)
)
)