mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-16 20:08:09 +00:00
allow pools & scalesets set to shutdown
to halt
(#1104)
Currently, if a pool or scaleset is set to `shutdown`, it cannot be set to `halt`. While moving from `halt` to `shutdown` would cause issues, moving from `shutdown` to `halt` is fine.
This commit is contained in:
@ -135,8 +135,7 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
def init(self) -> None:
|
||||
create_queue(self.get_pool_queue(), StorageType.corpus)
|
||||
ShrinkQueue(self.pool_id).create()
|
||||
self.state = PoolState.running
|
||||
self.save()
|
||||
self.set_state(PoolState.running)
|
||||
|
||||
def schedule_workset(self, work_set: WorkSet) -> bool:
|
||||
# Don't schedule work for pools that can't and won't do work.
|
||||
@ -183,15 +182,10 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
return cls.search(query=query)
|
||||
|
||||
def set_shutdown(self, now: bool) -> None:
|
||||
if self.state in [PoolState.halt, PoolState.shutdown]:
|
||||
return
|
||||
|
||||
if now:
|
||||
self.state = PoolState.halt
|
||||
self.set_state(PoolState.halt)
|
||||
else:
|
||||
self.state = PoolState.shutdown
|
||||
|
||||
self.save()
|
||||
self.set_state(PoolState.shutdown)
|
||||
|
||||
def shutdown(self) -> None:
|
||||
"""shutdown allows nodes to finish current work then delete"""
|
||||
@ -202,8 +196,6 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
nodes = Node.search(query={"pool_name": [self.name]})
|
||||
if not scalesets and not nodes:
|
||||
logging.info("pool stopped, deleting: %s", self.name)
|
||||
|
||||
self.state = PoolState.halt
|
||||
self.delete()
|
||||
return
|
||||
|
||||
@ -227,7 +219,6 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
delete_queue(self.get_pool_queue(), StorageType.corpus)
|
||||
ShrinkQueue(self.pool_id).delete()
|
||||
logging.info("pool stopped, deleting: %s", self.name)
|
||||
self.state = PoolState.halt
|
||||
self.delete()
|
||||
return
|
||||
|
||||
@ -239,6 +230,17 @@ class Pool(BASE_POOL, ORMMixin):
|
||||
|
||||
self.save()
|
||||
|
||||
def set_state(self, state: PoolState) -> None:
|
||||
if self.state == state:
|
||||
return
|
||||
|
||||
# scalesets should never leave the `halt` state
|
||||
if self.state == PoolState.halt:
|
||||
return
|
||||
|
||||
self.state = state
|
||||
self.save()
|
||||
|
||||
@classmethod
|
||||
def key_fields(cls) -> Tuple[str, str]:
|
||||
return ("name", "pool_id")
|
||||
|
@ -635,22 +635,11 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
node.delete()
|
||||
|
||||
def set_shutdown(self, now: bool) -> None:
|
||||
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.set_state(ScalesetState.halt)
|
||||
else:
|
||||
self.set_state(ScalesetState.shutdown)
|
||||
|
||||
self.save()
|
||||
|
||||
def shutdown(self) -> None:
|
||||
size = get_vmss_size(self.scaleset_id)
|
||||
if size is None:
|
||||
@ -807,6 +796,10 @@ class Scaleset(BASE_SCALESET, ORMMixin):
|
||||
if self.state == state:
|
||||
return
|
||||
|
||||
# scalesets should never leave the `halt` state
|
||||
if self.state == ScalesetState.halt:
|
||||
return
|
||||
|
||||
self.state = state
|
||||
self.save()
|
||||
if self.state == ScalesetState.resize:
|
||||
|
Reference in New Issue
Block a user