Stop tasks on nodes before deleting task queues (#801)

This commit is contained in:
bmc-msft
2021-05-17 14:59:13 -04:00
committed by GitHub
parent 194ea49f03
commit ff140a6b1b
3 changed files with 16 additions and 5 deletions

View File

@ -238,6 +238,11 @@ def on_worker_event_done(machine_id: UUID, event: WorkerDoneEvent) -> Result[Non
node.debug_keep_node = True node.debug_keep_node = True
node.save() node.save()
if not node.debug_keep_node:
node_task = NodeTasks.get(machine_id, event.task_id)
if node_task:
node_task.delete()
event.stdout = event.stdout[-MAX_OUTPUT_SIZE:] event.stdout = event.stdout[-MAX_OUTPUT_SIZE:]
event.stderr = event.stderr[-MAX_OUTPUT_SIZE:] event.stderr = event.stderr[-MAX_OUTPUT_SIZE:]
task_event = TaskEvent( task_event = TaskEvent(

View File

@ -26,7 +26,7 @@ from ..azure.storage import StorageType
from ..events import send_event from ..events import send_event
from ..orm import MappingIntStrAny, ORMMixin, QueryFilter from ..orm import MappingIntStrAny, ORMMixin, QueryFilter
from ..proxy_forward import ProxyForward from ..proxy_forward import ProxyForward
from ..workers.nodes import Node from ..workers.nodes import Node, NodeTasks
from ..workers.pools import Pool from ..workers.pools import Pool
from ..workers.scalesets import Scaleset from ..workers.scalesets import Scaleset
@ -124,14 +124,18 @@ class Task(BASE_TASK, ORMMixin):
self.set_state(TaskState.waiting) self.set_state(TaskState.waiting)
def stopping(self) -> None: def stopping(self) -> None:
# TODO: we need to 'unschedule' this task from the existing pools
from ..jobs import Job
logging.info("stopping task: %s:%s", self.job_id, self.task_id) logging.info("stopping task: %s:%s", self.job_id, self.task_id)
ProxyForward.remove_forward(self.task_id) ProxyForward.remove_forward(self.task_id)
delete_queue(str(self.task_id), StorageType.corpus)
Node.stop_task(self.task_id) Node.stop_task(self.task_id)
if not NodeTasks.get_nodes_by_task_id(self.task_id):
self.stopped()
def stopped(self) -> None:
self.set_state(TaskState.stopped) self.set_state(TaskState.stopped)
delete_queue(str(self.task_id), StorageType.corpus)
# TODO: we need to 'unschedule' this task from the existing pools
from ..jobs import Job
job = Job.get(self.job_id) job = Job.get(self.job_id)
if job: if job:

View File

@ -239,6 +239,8 @@ class Node(BASE_NODE, ORMMixin):
task = Task.get_by_task_id(entry.task_id) task = Task.get_by_task_id(entry.task_id)
if isinstance(task, Task): if isinstance(task, Task):
task.mark_failed(error) task.mark_failed(error)
if not self.debug_keep_node:
entry.delete()
def could_shrink_scaleset(self) -> bool: def could_shrink_scaleset(self) -> bool:
from .scalesets import ScalesetShrinkQueue from .scalesets import ScalesetShrinkQueue