Ejemplo n.º 1
0
def on_worker_event_running(machine_id: UUID,
                            event: WorkerRunningEvent) -> Result[None]:
    task = Task.get_by_task_id(event.task_id)
    if isinstance(task, Error):
        return task

    node = get_node(machine_id)
    if isinstance(node, Error):
        return node

    if node.state not in NodeState.ready_for_reset():
        node.state = NodeState.busy
        node.save()

    node_task = NodeTasks(machine_id=machine_id,
                          task_id=event.task_id,
                          state=NodeTaskState.running)
    node_task.save()

    if task.state in TaskState.shutting_down():
        logging.info(
            "ignoring task start from node.  machine_id:%s %s:%s (state: %s)",
            machine_id,
            task.job_id,
            task.task_id,
            task.state,
        )
        return None

    logging.info(
        "task started on node.  machine_id:%s %s:%s",
        machine_id,
        task.job_id,
        task.task_id,
    )
    task.state = TaskState.running
    task.save()

    # Start the clock for the task if it wasn't started already
    # (as happens in 1.0.0 agents)
    task.on_start()

    task_event = TaskEvent(
        task_id=task.task_id,
        machine_id=machine_id,
        event_data=WorkerEvent(running=event),
    )
    task_event.save()

    return None
Ejemplo n.º 2
0
def on_worker_event_done(machine_id: UUID,
                         event: WorkerDoneEvent) -> Result[None]:
    task = Task.get_by_task_id(event.task_id)
    if isinstance(task, Error):
        return task

    node = get_node(machine_id)
    if isinstance(node, Error):
        return node

    if event.exit_status.success:
        logging.info("task done. %s:%s status:%s", task.job_id, task.task_id,
                     event.exit_status)
        task.mark_stopping()
        if (task.config.debug and TaskDebugFlag.keep_node_on_completion
                in task.config.debug):
            node.debug_keep_node = True
            node.save()
    else:
        task.mark_failed(
            Error(
                code=ErrorCode.TASK_FAILED,
                errors=[
                    "task failed. exit_status:%s" % event.exit_status,
                    event.stdout[-MAX_OUTPUT_SIZE:],
                    event.stderr[-MAX_OUTPUT_SIZE:],
                ],
            ))

        if task.config.debug and (
                TaskDebugFlag.keep_node_on_failure in task.config.debug
                or TaskDebugFlag.keep_node_on_completion in task.config.debug):
            node.debug_keep_node = True
            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.stderr = event.stderr[-MAX_OUTPUT_SIZE:]
    task_event = TaskEvent(task_id=task.task_id,
                           machine_id=machine_id,
                           event_data=WorkerEvent(done=event))
    task_event.save()
    return None
Ejemplo n.º 3
0
def on_worker_event_running(machine_id: UUID,
                            event: WorkerRunningEvent) -> Result[None]:
    task = Task.get_by_task_id(event.task_id)
    if isinstance(task, Error):
        return task

    node = get_node(machine_id)
    if isinstance(node, Error):
        return node

    if node.state not in NodeState.ready_for_reset():
        node.set_state(NodeState.busy)

    node_task = NodeTasks(machine_id=machine_id,
                          task_id=event.task_id,
                          state=NodeTaskState.running)
    node_task.save()

    if task.state in TaskState.shutting_down():
        logging.info(
            "ignoring task start from node. "
            "machine_id:%s job_id:%s task_id:%s (state: %s)",
            machine_id,
            task.job_id,
            task.task_id,
            task.state,
        )
        return None

    logging.info(
        "task started on node.  machine_id:%s job_id%s task_id:%s",
        machine_id,
        task.job_id,
        task.task_id,
    )
    task.set_state(TaskState.running)

    task_event = TaskEvent(
        task_id=task.task_id,
        machine_id=machine_id,
        event_data=WorkerEvent(running=event),
    )
    task_event.save()

    return None