mirror of
https://github.com/clearml/clearml-server
synced 2025-04-22 07:04:36 +00:00
add update_execution_queue parameter to tasks.enqueue
This commit is contained in:
parent
58b748ddf3
commit
f9577f9faa
@ -109,6 +109,7 @@ class EnqueueRequest(UpdateRequest):
|
|||||||
queue = StringField()
|
queue = StringField()
|
||||||
queue_name = StringField()
|
queue_name = StringField()
|
||||||
verify_watched_queue = BoolField(default=False)
|
verify_watched_queue = BoolField(default=False)
|
||||||
|
update_execution_queue = BoolField(default=True)
|
||||||
|
|
||||||
|
|
||||||
class DeleteRequest(UpdateRequest):
|
class DeleteRequest(UpdateRequest):
|
||||||
|
@ -22,7 +22,8 @@ from apiserver.database.model.task.task import (
|
|||||||
TaskStatusMessage,
|
TaskStatusMessage,
|
||||||
ArtifactModes,
|
ArtifactModes,
|
||||||
Execution,
|
Execution,
|
||||||
DEFAULT_LAST_ITERATION, TaskType,
|
DEFAULT_LAST_ITERATION,
|
||||||
|
TaskType,
|
||||||
)
|
)
|
||||||
from apiserver.database.utils import get_options
|
from apiserver.database.utils import get_options
|
||||||
from apiserver.service_repo.auth import Identity
|
from apiserver.service_repo.auth import Identity
|
||||||
@ -100,7 +101,9 @@ def archive_task(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if include_pipeline_steps and (
|
if include_pipeline_steps and (
|
||||||
step_tasks := _get_pipeline_steps_for_controller_task(task, company_id, only=fields)
|
step_tasks := _get_pipeline_steps_for_controller_task(
|
||||||
|
task, company_id, only=fields
|
||||||
|
)
|
||||||
):
|
):
|
||||||
for step in step_tasks:
|
for step in step_tasks:
|
||||||
archive_task_core(step)
|
archive_task_core(step)
|
||||||
@ -137,7 +140,9 @@ def unarchive_task(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if include_pipeline_steps and (
|
if include_pipeline_steps and (
|
||||||
step_tasks := _get_pipeline_steps_for_controller_task(task, company_id, only=fields)
|
step_tasks := _get_pipeline_steps_for_controller_task(
|
||||||
|
task, company_id, only=fields
|
||||||
|
)
|
||||||
):
|
):
|
||||||
for step in step_tasks:
|
for step in step_tasks:
|
||||||
unarchive_task_core(step)
|
unarchive_task_core(step)
|
||||||
@ -205,12 +210,25 @@ def enqueue_task(
|
|||||||
queue_name: str = None,
|
queue_name: str = None,
|
||||||
validate: bool = False,
|
validate: bool = False,
|
||||||
force: bool = False,
|
force: bool = False,
|
||||||
|
update_execution_queue: bool = True,
|
||||||
) -> Tuple[int, dict]:
|
) -> Tuple[int, dict]:
|
||||||
if queue_id and queue_name:
|
if queue_id and queue_name:
|
||||||
raise errors.bad_request.ValidationError(
|
raise errors.bad_request.ValidationError(
|
||||||
"Either queue id or queue name should be provided"
|
"Either queue id or queue name should be provided"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
task = get_task_with_write_access(
|
||||||
|
task_id=task_id, company_id=company_id, identity=identity
|
||||||
|
)
|
||||||
|
if not update_execution_queue:
|
||||||
|
if not (
|
||||||
|
task.status == TaskStatus.queued and task.execution and task.execution.queue
|
||||||
|
):
|
||||||
|
raise errors.bad_request.ValidationError(
|
||||||
|
"Cannot skip setting execution queue for a task "
|
||||||
|
"that is not enqueued or does not have execution queue set"
|
||||||
|
)
|
||||||
|
|
||||||
if queue_name:
|
if queue_name:
|
||||||
queue = queue_bll.get_by_name(
|
queue = queue_bll.get_by_name(
|
||||||
company_id=company_id, queue_name=queue_name, only=("id",)
|
company_id=company_id, queue_name=queue_name, only=("id",)
|
||||||
@ -223,10 +241,6 @@ def enqueue_task(
|
|||||||
# try to get default queue
|
# try to get default queue
|
||||||
queue_id = queue_bll.get_default(company_id).id
|
queue_id = queue_bll.get_default(company_id).id
|
||||||
|
|
||||||
task = get_task_with_write_access(
|
|
||||||
task_id=task_id, company_id=company_id, identity=identity
|
|
||||||
)
|
|
||||||
|
|
||||||
user_id = identity.user
|
user_id = identity.user
|
||||||
if validate:
|
if validate:
|
||||||
TaskBLL.validate(task)
|
TaskBLL.validate(task)
|
||||||
@ -258,13 +272,19 @@ def enqueue_task(
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
# set the current queue ID in the task
|
# set the current queue ID in the task
|
||||||
if task.execution:
|
if update_execution_queue:
|
||||||
Task.objects(id=task_id).update(execution__queue=queue_id, multi=False)
|
if task.execution:
|
||||||
else:
|
Task.objects(id=task_id).update(execution__queue=queue_id, multi=False)
|
||||||
Task.objects(id=task_id).update(execution=Execution(queue=queue_id), multi=False)
|
else:
|
||||||
|
Task.objects(id=task_id).update(
|
||||||
|
execution=Execution(queue=queue_id), multi=False
|
||||||
|
)
|
||||||
|
nested_set(res, ("fields", "execution.queue"), queue_id)
|
||||||
|
|
||||||
# make sure that the task is not queued in any other queue
|
# make sure that the task is not queued in any other queue
|
||||||
TaskBLL.remove_task_from_all_queues(company_id=company_id, task_id=task_id, exclude=queue_id)
|
TaskBLL.remove_task_from_all_queues(
|
||||||
nested_set(res, ("fields", "execution.queue"), queue_id)
|
company_id=company_id, task_id=task_id, exclude=queue_id
|
||||||
|
)
|
||||||
return 1, res
|
return 1, res
|
||||||
|
|
||||||
|
|
||||||
@ -304,9 +324,7 @@ def delete_task(
|
|||||||
include_pipeline_steps: bool,
|
include_pipeline_steps: bool,
|
||||||
) -> Tuple[int, Task, CleanupResult]:
|
) -> Tuple[int, Task, CleanupResult]:
|
||||||
user_id = identity.user
|
user_id = identity.user
|
||||||
task = get_task_with_write_access(
|
task = get_task_with_write_access(task_id, company_id=company_id, identity=identity)
|
||||||
task_id, company_id=company_id, identity=identity
|
|
||||||
)
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
task.status != TaskStatus.created
|
task.status != TaskStatus.created
|
||||||
@ -378,9 +396,7 @@ def reset_task(
|
|||||||
clear_all: bool,
|
clear_all: bool,
|
||||||
) -> Tuple[dict, CleanupResult, dict]:
|
) -> Tuple[dict, CleanupResult, dict]:
|
||||||
user_id = identity.user
|
user_id = identity.user
|
||||||
task = get_task_with_write_access(
|
task = get_task_with_write_access(task_id, company_id=company_id, identity=identity)
|
||||||
task_id, company_id=company_id, identity=identity
|
|
||||||
)
|
|
||||||
|
|
||||||
if not force and task.status == TaskStatus.published:
|
if not force and task.status == TaskStatus.published:
|
||||||
raise errors.bad_request.InvalidTaskStatus(task_id=task.id, status=task.status)
|
raise errors.bad_request.InvalidTaskStatus(task_id=task.id, status=task.status)
|
||||||
@ -463,9 +479,7 @@ def publish_task(
|
|||||||
status_reason: str = "",
|
status_reason: str = "",
|
||||||
) -> dict:
|
) -> dict:
|
||||||
user_id = identity.user
|
user_id = identity.user
|
||||||
task = get_task_with_write_access(
|
task = get_task_with_write_access(task_id, company_id=company_id, identity=identity)
|
||||||
task_id, company_id=company_id, identity=identity
|
|
||||||
)
|
|
||||||
if not force:
|
if not force:
|
||||||
validate_status_change(task.status, TaskStatus.published)
|
validate_status_change(task.status, TaskStatus.published)
|
||||||
|
|
||||||
@ -584,7 +598,9 @@ def stop_task(
|
|||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
if include_pipeline_steps and (
|
if include_pipeline_steps and (
|
||||||
step_tasks := _get_pipeline_steps_for_controller_task(task, company_id, only=fields)
|
step_tasks := _get_pipeline_steps_for_controller_task(
|
||||||
|
task, company_id, only=fields
|
||||||
|
)
|
||||||
):
|
):
|
||||||
for step in step_tasks:
|
for step in step_tasks:
|
||||||
stop_task_core(step, True)
|
stop_task_core(step, True)
|
||||||
|
@ -1507,6 +1507,13 @@ Fails if the following parameters in the task were not filled:
|
|||||||
type: boolean
|
type: boolean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
"999.0": ${enqueue."2.22"} {
|
||||||
|
request.properties.update_execution_queue {
|
||||||
|
description: If set to false then the task 'execution.queue' is not updated. This can be done only for the task that is already enqueued
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enqueue_many {
|
enqueue_many {
|
||||||
"2.13": ${_definitions.change_many_request} {
|
"2.13": ${_definitions.change_many_request} {
|
||||||
|
@ -923,6 +923,11 @@ def delete_configuration(
|
|||||||
response_data_model=EnqueueResponse,
|
response_data_model=EnqueueResponse,
|
||||||
)
|
)
|
||||||
def enqueue(call: APICall, company_id, request: EnqueueRequest):
|
def enqueue(call: APICall, company_id, request: EnqueueRequest):
|
||||||
|
if request.verify_watched_queue and not request.update_execution_queue:
|
||||||
|
raise errors.bad_request.ValidationError(
|
||||||
|
"verify_watched_queue cannot be used with update_execution_queue=False"
|
||||||
|
)
|
||||||
|
|
||||||
queued, res = enqueue_task(
|
queued, res = enqueue_task(
|
||||||
task_id=request.task,
|
task_id=request.task,
|
||||||
company_id=company_id,
|
company_id=company_id,
|
||||||
@ -932,6 +937,7 @@ def enqueue(call: APICall, company_id, request: EnqueueRequest):
|
|||||||
status_reason=request.status_reason,
|
status_reason=request.status_reason,
|
||||||
queue_name=request.queue_name,
|
queue_name=request.queue_name,
|
||||||
force=request.force,
|
force=request.force,
|
||||||
|
update_execution_queue=request.update_execution_queue,
|
||||||
)
|
)
|
||||||
if request.verify_watched_queue:
|
if request.verify_watched_queue:
|
||||||
res_queue = nested_get(res, ("fields", "execution.queue"))
|
res_queue = nested_get(res, ("fields", "execution.queue"))
|
||||||
|
Loading…
Reference in New Issue
Block a user