mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-16 20:08:09 +00:00
add event for scaleset state updates (#882)
This moves all scaleset state updates through `Scaleset.set_state` and adds a new event EventScalesetStateUpdated.
This commit is contained in:
@ -222,8 +222,7 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
return
|
||||
|
||||
for scaleset in scalesets:
|
||||
scaleset.state = ScalesetState.halt
|
||||
scaleset.save()
|
||||
scaleset.set_state(ScalesetState.halt)
|
||||
|
||||
for node in nodes:
|
||||
node.set_halt()
|
||||
|
@ -13,6 +13,7 @@ from onefuzztypes.events import (
|
||||
EventScalesetCreated,
|
||||
EventScalesetDeleted,
|
||||
EventScalesetFailed,
|
||||
EventScalesetStateUpdated,
|
||||
)
|
||||
from onefuzztypes.models import Error
|
||||
from onefuzztypes.models import Scaleset as BASE_SCALESET
|
||||
@ -141,8 +142,7 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
return
|
||||
|
||||
self.error = error
|
||||
self.state = ScalesetState.creation_failed
|
||||
self.save()
|
||||
self.set_state(ScalesetState.creation_failed)
|
||||
|
||||
send_event(
|
||||
EventScalesetFailed(
|
||||
@ -184,11 +184,9 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
self.set_failed(error)
|
||||
return
|
||||
else:
|
||||
self.state = ScalesetState.setup
|
||||
self.set_state(ScalesetState.setup)
|
||||
else:
|
||||
self.state = ScalesetState.setup
|
||||
|
||||
self.save()
|
||||
self.set_state(ScalesetState.setup)
|
||||
|
||||
def setup(self) -> None:
|
||||
from .pools import Pool
|
||||
@ -269,7 +267,7 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
self.set_failed(identity_result)
|
||||
return
|
||||
else:
|
||||
self.state = ScalesetState.running
|
||||
self.set_state(ScalesetState.running)
|
||||
self.save()
|
||||
|
||||
def try_set_identity(self, vmss: Any) -> Optional[Error]:
|
||||
@ -414,9 +412,7 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
node_count = len(Node.search_states(scaleset_id=self.scaleset_id))
|
||||
if node_count == self.size:
|
||||
logging.info(SCALESET_LOG_PREFIX + "resize finished: %s", self.scaleset_id)
|
||||
self.state = ScalesetState.running
|
||||
self.save()
|
||||
return
|
||||
self.set_state(ScalesetState.running)
|
||||
else:
|
||||
logging.info(
|
||||
SCALESET_LOG_PREFIX
|
||||
@ -426,7 +422,6 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
node_count,
|
||||
self.size,
|
||||
)
|
||||
return
|
||||
|
||||
def _resize_grow(self) -> None:
|
||||
try:
|
||||
@ -577,10 +572,16 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
if self.state in [ScalesetState.halt, ScalesetState.shutdown]:
|
||||
return
|
||||
|
||||
logging.info(
|
||||
SCALESET_LOG_PREFIX + "scaleset set_shutdown: scaleset_id:%s now:%s",
|
||||
self.scaleset_id,
|
||||
now,
|
||||
)
|
||||
|
||||
if now:
|
||||
self.state = ScalesetState.halt
|
||||
self.set_state(ScalesetState.halt)
|
||||
else:
|
||||
self.state = ScalesetState.shutdown
|
||||
self.set_state(ScalesetState.shutdown)
|
||||
|
||||
self.save()
|
||||
|
||||
@ -736,6 +737,18 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
EventScalesetDeleted(scaleset_id=self.scaleset_id, pool_name=self.pool_name)
|
||||
)
|
||||
|
||||
def set_state(self, state: ScalesetState) -> None:
|
||||
if self.state == state:
|
||||
return
|
||||
|
||||
self.state = state
|
||||
self.save()
|
||||
send_event(
|
||||
EventScalesetStateUpdated(
|
||||
scaleset_id=self.scaleset_id, pool_name=self.pool_name, state=self.state
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class ShrinkEntry(BaseModel):
|
||||
shrink_id: UUID = Field(default_factory=uuid4)
|
||||
|
Reference in New Issue
Block a user