WIP: Support pausing jobs and allow jobs to be submitted in paused status #104312

Closed
David Zhang wants to merge 2 commits from David-Zhang-10/flamenco:paused-job-status into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
17 changed files with 505 additions and 377 deletions
Showing only changes of commit 4b3392fe84 - Show all commits

View File

@ -18,6 +18,7 @@ Name | Type | Description | Notes
**metadata** | [**JobMetadata**](JobMetadata.md) | | [optional]
**storage** | [**JobStorageInfo**](JobStorageInfo.md) | | [optional]
**worker_tag** | **str** | Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. | [optional]
**submit_as_paused** | **bool** | Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. | [optional] if omitted the server will use the default value of False
**delete_requested_at** | **datetime** | If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. | [optional]
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]

View File

@ -4,7 +4,7 @@
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**value** | **str** | | must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ]
**value** | **str** | | must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -1296,6 +1296,7 @@ with flamenco.manager.ApiClient() as api_client:
shaman_checkout_id="shaman_checkout_id_example",
),
worker_tag="worker_tag_example",
submit_as_paused=False,
) # SubmittedJob | Job to submit
# example passing only required values which don't have defaults set
@ -1332,7 +1333,7 @@ No authorization required
| Status code | Description | Response headers |
|-------------|-------------|------------------|
**200** | Job was succesfully compiled into individual tasks. | - |
**200** | Job was successfully compiled into individual tasks. | - |
**412** | The given job type etag does not match the job type etag on the Manager. This is likely due to the client caching the job type for too long. | - |
**0** | Error message | - |
@ -1378,6 +1379,7 @@ with flamenco.manager.ApiClient() as api_client:
shaman_checkout_id="shaman_checkout_id_example",
),
worker_tag="worker_tag_example",
submit_as_paused=False,
) # SubmittedJob | Job to check
# example passing only required values which don't have defaults set

View File

@ -14,6 +14,7 @@ Name | Type | Description | Notes
**metadata** | [**JobMetadata**](JobMetadata.md) | | [optional]
**storage** | [**JobStorageInfo**](JobStorageInfo.md) | | [optional]
**worker_tag** | **str** | Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. | [optional]
**submit_as_paused** | **bool** | Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. | [optional] if omitted the server will use the default value of False
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -111,6 +111,7 @@ class Job(ModelComposed):
'metadata': (JobMetadata,), # noqa: E501
'storage': (JobStorageInfo,), # noqa: E501
'worker_tag': (str,), # noqa: E501
'submit_as_paused': (bool,), # noqa: E501
'delete_requested_at': (datetime,), # noqa: E501
}
@ -134,6 +135,7 @@ class Job(ModelComposed):
'metadata': 'metadata', # noqa: E501
'storage': 'storage', # noqa: E501
'worker_tag': 'worker_tag', # noqa: E501
'submit_as_paused': 'submit_as_paused', # noqa: E501
'delete_requested_at': 'delete_requested_at', # noqa: E501
}
@ -190,6 +192,7 @@ class Job(ModelComposed):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
delete_requested_at (datetime): If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. . [optional] # noqa: E501
"""
@ -305,6 +308,7 @@ class Job(ModelComposed):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
delete_requested_at (datetime): If job deletion was requested, this is the timestamp at which that request was stored on Flamenco Manager. . [optional] # noqa: E501
"""

View File

@ -57,6 +57,7 @@ class JobStatus(ModelSimple):
'COMPLETED': "completed",
'FAILED': "failed",
'PAUSED': "paused",
'PAUSE-REQUESTED': "pause-requested",
'QUEUED': "queued",
'CANCEL-REQUESTED': "cancel-requested",
'REQUEUEING': "requeueing",
@ -112,10 +113,10 @@ class JobStatus(ModelSimple):
Note that value can be passed either in args or in kwargs, but not in both.
Args:
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
Keyword Args:
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
_check_type (bool): if True, values for parameters in openapi_types
will be type checked and a TypeError will be
raised if the wrong type is input.
@ -202,10 +203,10 @@ class JobStatus(ModelSimple):
Note that value can be passed either in args or in kwargs, but not in both.
Args:
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
args[0] (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
Keyword Args:
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
value (str):, must be one of ["active", "canceled", "completed", "failed", "paused", "pause-requested", "queued", "cancel-requested", "requeueing", "under-construction", ] # noqa: E501
_check_type (bool): if True, values for parameters in openapi_types
will be type checked and a TypeError will be
raised if the wrong type is input.

View File

@ -100,6 +100,7 @@ class SubmittedJob(ModelNormal):
'metadata': (JobMetadata,), # noqa: E501
'storage': (JobStorageInfo,), # noqa: E501
'worker_tag': (str,), # noqa: E501
'submit_as_paused': (bool,), # noqa: E501
}
@cached_property
@ -117,6 +118,7 @@ class SubmittedJob(ModelNormal):
'metadata': 'metadata', # noqa: E501
'storage': 'storage', # noqa: E501
'worker_tag': 'worker_tag', # noqa: E501
'submit_as_paused': 'submit_as_paused', # noqa: E501
}
read_only_vars = {
@ -171,6 +173,7 @@ class SubmittedJob(ModelNormal):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
"""
priority = kwargs.get('priority', 50)
@ -268,6 +271,7 @@ class SubmittedJob(ModelNormal):
metadata (JobMetadata): [optional] # noqa: E501
storage (JobStorageInfo): [optional] # noqa: E501
worker_tag (str): Worker tag that should execute this job. When a tag ID is given, only Workers in that tag will be scheduled to work on it. If empty or ommitted, all workers can work on this job. . [optional] # noqa: E501
submit_as_paused (bool): Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention. . [optional] if omitted the server will use the default value of False # noqa: E501
"""
priority = kwargs.get('priority', 50)

View File

@ -76,152 +76,152 @@ All URIs are relative to *http://localhost*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*JobsApi* | [**delete_job**](flamenco\manager\docs/JobsApi.md#delete_job) | **DELETE** /api/v3/jobs/{job_id} | Request deletion this job, including its tasks and any log files. The actual deletion may happen in the background. No job files will be deleted (yet).
*JobsApi* | [**delete_job_mass**](flamenco\manager\docs/JobsApi.md#delete_job_mass) | **DELETE** /api/v3/jobs/mass-delete | Mark jobs for deletion, based on certain criteria.
*JobsApi* | [**delete_job_what_would_it_do**](flamenco\manager\docs/JobsApi.md#delete_job_what_would_it_do) | **GET** /api/v3/jobs/{job_id}/what-would-delete-do | Get info about what would be deleted when deleting this job. The job itself, its logs, and the last-rendered images will always be deleted. The job files are only deleted conditionally, and this operation can be used to figure that out.
*JobsApi* | [**fetch_global_last_rendered_info**](flamenco\manager\docs/JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/v3/jobs/last-rendered | Get the URL that serves the last-rendered images.
*JobsApi* | [**fetch_job**](flamenco\manager\docs/JobsApi.md#fetch_job) | **GET** /api/v3/jobs/{job_id} | Fetch info about the job.
*JobsApi* | [**fetch_job_blocklist**](flamenco\manager\docs/JobsApi.md#fetch_job_blocklist) | **GET** /api/v3/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job.
*JobsApi* | [**fetch_job_last_rendered_info**](flamenco\manager\docs/JobsApi.md#fetch_job_last_rendered_info) | **GET** /api/v3/jobs/{job_id}/last-rendered | Get the URL that serves the last-rendered images of this job.
*JobsApi* | [**fetch_job_tasks**](flamenco\manager\docs/JobsApi.md#fetch_job_tasks) | **GET** /api/v3/jobs/{job_id}/tasks | Fetch a summary of all tasks of the given job.
*JobsApi* | [**fetch_task**](flamenco\manager\docs/JobsApi.md#fetch_task) | **GET** /api/v3/tasks/{task_id} | Fetch a single task.
*JobsApi* | [**fetch_task_log_info**](flamenco\manager\docs/JobsApi.md#fetch_task_log_info) | **GET** /api/v3/tasks/{task_id}/log | Get the URL of the task log, and some more info.
*JobsApi* | [**fetch_task_log_tail**](flamenco\manager\docs/JobsApi.md#fetch_task_log_tail) | **GET** /api/v3/tasks/{task_id}/logtail | Fetch the last few lines of the task's log.
*JobsApi* | [**get_job_type**](flamenco\manager\docs/JobsApi.md#get_job_type) | **GET** /api/v3/jobs/type/{typeName} | Get single job type and its parameters.
*JobsApi* | [**get_job_types**](flamenco\manager\docs/JobsApi.md#get_job_types) | **GET** /api/v3/jobs/types | Get list of job types and their parameters.
*JobsApi* | [**query_jobs**](flamenco\manager\docs/JobsApi.md#query_jobs) | **POST** /api/v3/jobs/query | Fetch list of jobs.
*JobsApi* | [**remove_job_blocklist**](flamenco\manager\docs/JobsApi.md#remove_job_blocklist) | **DELETE** /api/v3/jobs/{job_id}/blocklist | Remove entries from a job blocklist.
*JobsApi* | [**set_job_priority**](flamenco\manager\docs/JobsApi.md#set_job_priority) | **POST** /api/v3/jobs/{job_id}/setpriority |
*JobsApi* | [**set_job_status**](flamenco\manager\docs/JobsApi.md#set_job_status) | **POST** /api/v3/jobs/{job_id}/setstatus |
*JobsApi* | [**set_task_status**](flamenco\manager\docs/JobsApi.md#set_task_status) | **POST** /api/v3/tasks/{task_id}/setstatus |
*JobsApi* | [**submit_job**](flamenco\manager\docs/JobsApi.md#submit_job) | **POST** /api/v3/jobs | Submit a new job for Flamenco Manager to execute.
*JobsApi* | [**submit_job_check**](flamenco\manager\docs/JobsApi.md#submit_job_check) | **POST** /api/v3/jobs/check | Submit a new job for Flamenco Manager to check.
*MetaApi* | [**check_blender_exe_path**](flamenco\manager\docs/MetaApi.md#check_blender_exe_path) | **POST** /api/v3/configuration/check/blender | Validate a CLI command for use as way to start Blender
*MetaApi* | [**check_shared_storage_path**](flamenco\manager\docs/MetaApi.md#check_shared_storage_path) | **POST** /api/v3/configuration/check/shared-storage | Validate a path for use as shared storage.
*MetaApi* | [**find_blender_exe_path**](flamenco\manager\docs/MetaApi.md#find_blender_exe_path) | **GET** /api/v3/configuration/check/blender | Find one or more CLI commands for use as way to start Blender
*MetaApi* | [**get_configuration**](flamenco\manager\docs/MetaApi.md#get_configuration) | **GET** /api/v3/configuration | Get the configuration of this Manager.
*MetaApi* | [**get_configuration_file**](flamenco\manager\docs/MetaApi.md#get_configuration_file) | **GET** /api/v3/configuration/file | Retrieve the configuration of Flamenco Manager.
*MetaApi* | [**get_farm_status**](flamenco\manager\docs/MetaApi.md#get_farm_status) | **GET** /api/v3/status | Get the status of this Flamenco farm.
*MetaApi* | [**get_shared_storage**](flamenco\manager\docs/MetaApi.md#get_shared_storage) | **GET** /api/v3/configuration/shared-storage/{audience}/{platform} | Get the shared storage location of this Manager, adjusted for the given audience and platform.
*MetaApi* | [**get_variables**](flamenco\manager\docs/MetaApi.md#get_variables) | **GET** /api/v3/configuration/variables/{audience}/{platform} | Get the variables of this Manager. Used by the Blender add-on to recognise two-way variables, and for the web interface to do variable replacement based on the browser's platform.
*MetaApi* | [**get_version**](flamenco\manager\docs/MetaApi.md#get_version) | **GET** /api/v3/version | Get the Flamenco version of this Manager
*MetaApi* | [**save_setup_assistant_config**](flamenco\manager\docs/MetaApi.md#save_setup_assistant_config) | **POST** /api/v3/configuration/setup-assistant | Update the Manager's configuration, and restart it in fully functional mode.
*ShamanApi* | [**shaman_checkout**](flamenco\manager\docs/ShamanApi.md#shaman_checkout) | **POST** /api/v3/shaman/checkout/create | Create a directory, and symlink the required files into it. The files must all have been uploaded to Shaman before calling this endpoint.
*ShamanApi* | [**shaman_checkout_requirements**](flamenco\manager\docs/ShamanApi.md#shaman_checkout_requirements) | **POST** /api/v3/shaman/checkout/requirements | Checks a Shaman Requirements file, and reports which files are unknown.
*ShamanApi* | [**shaman_file_store**](flamenco\manager\docs/ShamanApi.md#shaman_file_store) | **POST** /api/v3/shaman/files/{checksum}/{filesize} | Store a new file on the Shaman server. Note that the Shaman server can forcibly close the HTTP connection when another client finishes uploading the exact same file, to prevent double uploads. The file's contents should be sent in the request body.
*ShamanApi* | [**shaman_file_store_check**](flamenco\manager\docs/ShamanApi.md#shaman_file_store_check) | **GET** /api/v3/shaman/files/{checksum}/{filesize} | Check the status of a file on the Shaman server.
*WorkerApi* | [**may_worker_run**](flamenco\manager\docs/WorkerApi.md#may_worker_run) | **GET** /api/v3/worker/task/{task_id}/may-i-run | The response indicates whether the worker is allowed to run / keep running the task. Optionally contains a queued worker status change.
*WorkerApi* | [**register_worker**](flamenco\manager\docs/WorkerApi.md#register_worker) | **POST** /api/v3/worker/register-worker | Register a new worker
*WorkerApi* | [**schedule_task**](flamenco\manager\docs/WorkerApi.md#schedule_task) | **POST** /api/v3/worker/task | Obtain a new task to execute
*WorkerApi* | [**sign_off**](flamenco\manager\docs/WorkerApi.md#sign_off) | **POST** /api/v3/worker/sign-off | Mark the worker as offline
*WorkerApi* | [**sign_on**](flamenco\manager\docs/WorkerApi.md#sign_on) | **POST** /api/v3/worker/sign-on | Authenticate & sign in the worker.
*WorkerApi* | [**task_output_produced**](flamenco\manager\docs/WorkerApi.md#task_output_produced) | **POST** /api/v3/worker/task/{task_id}/output-produced | Store the most recently rendered frame here. Note that it is up to the Worker to ensure this is in a format that's digestable by the Manager. Currently only PNG and JPEG support is planned.
*WorkerApi* | [**task_update**](flamenco\manager\docs/WorkerApi.md#task_update) | **POST** /api/v3/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure.
*WorkerApi* | [**worker_state**](flamenco\manager\docs/WorkerApi.md#worker_state) | **GET** /api/v3/worker/state |
*WorkerApi* | [**worker_state_changed**](flamenco\manager\docs/WorkerApi.md#worker_state_changed) | **POST** /api/v3/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals.
*WorkerMgtApi* | [**create_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#create_worker_tag) | **POST** /api/v3/worker-mgt/tags | Create a new worker tag.
*WorkerMgtApi* | [**delete_worker**](flamenco\manager\docs/WorkerMgtApi.md#delete_worker) | **DELETE** /api/v3/worker-mgt/workers/{worker_id} | Remove the given worker. It is recommended to only call this function when the worker is in `offline` state. If the worker is still running, stop it first. Any task still assigned to the worker will be requeued.
*WorkerMgtApi* | [**delete_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#delete_worker_tag) | **DELETE** /api/v3/worker-mgt/tag/{tag_id} | Remove this worker tag. This unassigns all workers from the tag and removes it.
*WorkerMgtApi* | [**fetch_worker**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker) | **GET** /api/v3/worker-mgt/workers/{worker_id} | Fetch info about the worker.
*WorkerMgtApi* | [**fetch_worker_sleep_schedule**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_sleep_schedule) | **GET** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**fetch_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_tag) | **GET** /api/v3/worker-mgt/tag/{tag_id} | Get a single worker tag.
*WorkerMgtApi* | [**fetch_worker_tags**](flamenco\manager\docs/WorkerMgtApi.md#fetch_worker_tags) | **GET** /api/v3/worker-mgt/tags | Get list of worker tags.
*WorkerMgtApi* | [**fetch_workers**](flamenco\manager\docs/WorkerMgtApi.md#fetch_workers) | **GET** /api/v3/worker-mgt/workers | Get list of workers.
*WorkerMgtApi* | [**request_worker_status_change**](flamenco\manager\docs/WorkerMgtApi.md#request_worker_status_change) | **POST** /api/v3/worker-mgt/workers/{worker_id}/setstatus |
*WorkerMgtApi* | [**set_worker_sleep_schedule**](flamenco\manager\docs/WorkerMgtApi.md#set_worker_sleep_schedule) | **POST** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**set_worker_tags**](flamenco\manager\docs/WorkerMgtApi.md#set_worker_tags) | **POST** /api/v3/worker-mgt/workers/{worker_id}/settags |
*WorkerMgtApi* | [**update_worker_tag**](flamenco\manager\docs/WorkerMgtApi.md#update_worker_tag) | **PUT** /api/v3/worker-mgt/tag/{tag_id} | Update an existing worker tag.
*JobsApi* | [**delete_job**](flamenco/manager/docs/JobsApi.md#delete_job) | **DELETE** /api/v3/jobs/{job_id} | Request deletion this job, including its tasks and any log files. The actual deletion may happen in the background. No job files will be deleted (yet).
*JobsApi* | [**delete_job_mass**](flamenco/manager/docs/JobsApi.md#delete_job_mass) | **DELETE** /api/v3/jobs/mass-delete | Mark jobs for deletion, based on certain criteria.
*JobsApi* | [**delete_job_what_would_it_do**](flamenco/manager/docs/JobsApi.md#delete_job_what_would_it_do) | **GET** /api/v3/jobs/{job_id}/what-would-delete-do | Get info about what would be deleted when deleting this job. The job itself, its logs, and the last-rendered images will always be deleted. The job files are only deleted conditionally, and this operation can be used to figure that out.
*JobsApi* | [**fetch_global_last_rendered_info**](flamenco/manager/docs/JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/v3/jobs/last-rendered | Get the URL that serves the last-rendered images.
*JobsApi* | [**fetch_job**](flamenco/manager/docs/JobsApi.md#fetch_job) | **GET** /api/v3/jobs/{job_id} | Fetch info about the job.
*JobsApi* | [**fetch_job_blocklist**](flamenco/manager/docs/JobsApi.md#fetch_job_blocklist) | **GET** /api/v3/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job.
*JobsApi* | [**fetch_job_last_rendered_info**](flamenco/manager/docs/JobsApi.md#fetch_job_last_rendered_info) | **GET** /api/v3/jobs/{job_id}/last-rendered | Get the URL that serves the last-rendered images of this job.
*JobsApi* | [**fetch_job_tasks**](flamenco/manager/docs/JobsApi.md#fetch_job_tasks) | **GET** /api/v3/jobs/{job_id}/tasks | Fetch a summary of all tasks of the given job.
*JobsApi* | [**fetch_task**](flamenco/manager/docs/JobsApi.md#fetch_task) | **GET** /api/v3/tasks/{task_id} | Fetch a single task.
*JobsApi* | [**fetch_task_log_info**](flamenco/manager/docs/JobsApi.md#fetch_task_log_info) | **GET** /api/v3/tasks/{task_id}/log | Get the URL of the task log, and some more info.
*JobsApi* | [**fetch_task_log_tail**](flamenco/manager/docs/JobsApi.md#fetch_task_log_tail) | **GET** /api/v3/tasks/{task_id}/logtail | Fetch the last few lines of the task's log.
*JobsApi* | [**get_job_type**](flamenco/manager/docs/JobsApi.md#get_job_type) | **GET** /api/v3/jobs/type/{typeName} | Get single job type and its parameters.
*JobsApi* | [**get_job_types**](flamenco/manager/docs/JobsApi.md#get_job_types) | **GET** /api/v3/jobs/types | Get list of job types and their parameters.
*JobsApi* | [**query_jobs**](flamenco/manager/docs/JobsApi.md#query_jobs) | **POST** /api/v3/jobs/query | Fetch list of jobs.
*JobsApi* | [**remove_job_blocklist**](flamenco/manager/docs/JobsApi.md#remove_job_blocklist) | **DELETE** /api/v3/jobs/{job_id}/blocklist | Remove entries from a job blocklist.
*JobsApi* | [**set_job_priority**](flamenco/manager/docs/JobsApi.md#set_job_priority) | **POST** /api/v3/jobs/{job_id}/setpriority |
*JobsApi* | [**set_job_status**](flamenco/manager/docs/JobsApi.md#set_job_status) | **POST** /api/v3/jobs/{job_id}/setstatus |
*JobsApi* | [**set_task_status**](flamenco/manager/docs/JobsApi.md#set_task_status) | **POST** /api/v3/tasks/{task_id}/setstatus |
*JobsApi* | [**submit_job**](flamenco/manager/docs/JobsApi.md#submit_job) | **POST** /api/v3/jobs | Submit a new job for Flamenco Manager to execute.
*JobsApi* | [**submit_job_check**](flamenco/manager/docs/JobsApi.md#submit_job_check) | **POST** /api/v3/jobs/check | Submit a new job for Flamenco Manager to check.
*MetaApi* | [**check_blender_exe_path**](flamenco/manager/docs/MetaApi.md#check_blender_exe_path) | **POST** /api/v3/configuration/check/blender | Validate a CLI command for use as way to start Blender
*MetaApi* | [**check_shared_storage_path**](flamenco/manager/docs/MetaApi.md#check_shared_storage_path) | **POST** /api/v3/configuration/check/shared-storage | Validate a path for use as shared storage.
*MetaApi* | [**find_blender_exe_path**](flamenco/manager/docs/MetaApi.md#find_blender_exe_path) | **GET** /api/v3/configuration/check/blender | Find one or more CLI commands for use as way to start Blender
*MetaApi* | [**get_configuration**](flamenco/manager/docs/MetaApi.md#get_configuration) | **GET** /api/v3/configuration | Get the configuration of this Manager.
*MetaApi* | [**get_configuration_file**](flamenco/manager/docs/MetaApi.md#get_configuration_file) | **GET** /api/v3/configuration/file | Retrieve the configuration of Flamenco Manager.
*MetaApi* | [**get_farm_status**](flamenco/manager/docs/MetaApi.md#get_farm_status) | **GET** /api/v3/status | Get the status of this Flamenco farm.
*MetaApi* | [**get_shared_storage**](flamenco/manager/docs/MetaApi.md#get_shared_storage) | **GET** /api/v3/configuration/shared-storage/{audience}/{platform} | Get the shared storage location of this Manager, adjusted for the given audience and platform.
*MetaApi* | [**get_variables**](flamenco/manager/docs/MetaApi.md#get_variables) | **GET** /api/v3/configuration/variables/{audience}/{platform} | Get the variables of this Manager. Used by the Blender add-on to recognise two-way variables, and for the web interface to do variable replacement based on the browser's platform.
*MetaApi* | [**get_version**](flamenco/manager/docs/MetaApi.md#get_version) | **GET** /api/v3/version | Get the Flamenco version of this Manager
*MetaApi* | [**save_setup_assistant_config**](flamenco/manager/docs/MetaApi.md#save_setup_assistant_config) | **POST** /api/v3/configuration/setup-assistant | Update the Manager's configuration, and restart it in fully functional mode.
*ShamanApi* | [**shaman_checkout**](flamenco/manager/docs/ShamanApi.md#shaman_checkout) | **POST** /api/v3/shaman/checkout/create | Create a directory, and symlink the required files into it. The files must all have been uploaded to Shaman before calling this endpoint.
*ShamanApi* | [**shaman_checkout_requirements**](flamenco/manager/docs/ShamanApi.md#shaman_checkout_requirements) | **POST** /api/v3/shaman/checkout/requirements | Checks a Shaman Requirements file, and reports which files are unknown.
*ShamanApi* | [**shaman_file_store**](flamenco/manager/docs/ShamanApi.md#shaman_file_store) | **POST** /api/v3/shaman/files/{checksum}/{filesize} | Store a new file on the Shaman server. Note that the Shaman server can forcibly close the HTTP connection when another client finishes uploading the exact same file, to prevent double uploads. The file's contents should be sent in the request body.
*ShamanApi* | [**shaman_file_store_check**](flamenco/manager/docs/ShamanApi.md#shaman_file_store_check) | **GET** /api/v3/shaman/files/{checksum}/{filesize} | Check the status of a file on the Shaman server.
*WorkerApi* | [**may_worker_run**](flamenco/manager/docs/WorkerApi.md#may_worker_run) | **GET** /api/v3/worker/task/{task_id}/may-i-run | The response indicates whether the worker is allowed to run / keep running the task. Optionally contains a queued worker status change.
*WorkerApi* | [**register_worker**](flamenco/manager/docs/WorkerApi.md#register_worker) | **POST** /api/v3/worker/register-worker | Register a new worker
*WorkerApi* | [**schedule_task**](flamenco/manager/docs/WorkerApi.md#schedule_task) | **POST** /api/v3/worker/task | Obtain a new task to execute
*WorkerApi* | [**sign_off**](flamenco/manager/docs/WorkerApi.md#sign_off) | **POST** /api/v3/worker/sign-off | Mark the worker as offline
*WorkerApi* | [**sign_on**](flamenco/manager/docs/WorkerApi.md#sign_on) | **POST** /api/v3/worker/sign-on | Authenticate & sign in the worker.
*WorkerApi* | [**task_output_produced**](flamenco/manager/docs/WorkerApi.md#task_output_produced) | **POST** /api/v3/worker/task/{task_id}/output-produced | Store the most recently rendered frame here. Note that it is up to the Worker to ensure this is in a format that's digestable by the Manager. Currently only PNG and JPEG support is planned.
*WorkerApi* | [**task_update**](flamenco/manager/docs/WorkerApi.md#task_update) | **POST** /api/v3/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure.
*WorkerApi* | [**worker_state**](flamenco/manager/docs/WorkerApi.md#worker_state) | **GET** /api/v3/worker/state |
*WorkerApi* | [**worker_state_changed**](flamenco/manager/docs/WorkerApi.md#worker_state_changed) | **POST** /api/v3/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals.
*WorkerMgtApi* | [**create_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#create_worker_tag) | **POST** /api/v3/worker-mgt/tags | Create a new worker tag.
*WorkerMgtApi* | [**delete_worker**](flamenco/manager/docs/WorkerMgtApi.md#delete_worker) | **DELETE** /api/v3/worker-mgt/workers/{worker_id} | Remove the given worker. It is recommended to only call this function when the worker is in `offline` state. If the worker is still running, stop it first. Any task still assigned to the worker will be requeued.
*WorkerMgtApi* | [**delete_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#delete_worker_tag) | **DELETE** /api/v3/worker-mgt/tag/{tag_id} | Remove this worker tag. This unassigns all workers from the tag and removes it.
*WorkerMgtApi* | [**fetch_worker**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker) | **GET** /api/v3/worker-mgt/workers/{worker_id} | Fetch info about the worker.
*WorkerMgtApi* | [**fetch_worker_sleep_schedule**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_sleep_schedule) | **GET** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**fetch_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_tag) | **GET** /api/v3/worker-mgt/tag/{tag_id} | Get a single worker tag.
*WorkerMgtApi* | [**fetch_worker_tags**](flamenco/manager/docs/WorkerMgtApi.md#fetch_worker_tags) | **GET** /api/v3/worker-mgt/tags | Get list of worker tags.
*WorkerMgtApi* | [**fetch_workers**](flamenco/manager/docs/WorkerMgtApi.md#fetch_workers) | **GET** /api/v3/worker-mgt/workers | Get list of workers.
*WorkerMgtApi* | [**request_worker_status_change**](flamenco/manager/docs/WorkerMgtApi.md#request_worker_status_change) | **POST** /api/v3/worker-mgt/workers/{worker_id}/setstatus |
*WorkerMgtApi* | [**set_worker_sleep_schedule**](flamenco/manager/docs/WorkerMgtApi.md#set_worker_sleep_schedule) | **POST** /api/v3/worker-mgt/workers/{worker_id}/sleep-schedule |
*WorkerMgtApi* | [**set_worker_tags**](flamenco/manager/docs/WorkerMgtApi.md#set_worker_tags) | **POST** /api/v3/worker-mgt/workers/{worker_id}/settags |
*WorkerMgtApi* | [**update_worker_tag**](flamenco/manager/docs/WorkerMgtApi.md#update_worker_tag) | **PUT** /api/v3/worker-mgt/tag/{tag_id} | Update an existing worker tag.
## Documentation For Models
- [AssignedTask](flamenco\manager\docs/AssignedTask.md)
- [AvailableJobSetting](flamenco\manager\docs/AvailableJobSetting.md)
- [AvailableJobSettingEvalInfo](flamenco\manager\docs/AvailableJobSettingEvalInfo.md)
- [AvailableJobSettingSubtype](flamenco\manager\docs/AvailableJobSettingSubtype.md)
- [AvailableJobSettingType](flamenco\manager\docs/AvailableJobSettingType.md)
- [AvailableJobSettingVisibility](flamenco\manager\docs/AvailableJobSettingVisibility.md)
- [AvailableJobType](flamenco\manager\docs/AvailableJobType.md)
- [AvailableJobTypes](flamenco\manager\docs/AvailableJobTypes.md)
- [BlenderPathCheckResult](flamenco\manager\docs/BlenderPathCheckResult.md)
- [BlenderPathFindResult](flamenco\manager\docs/BlenderPathFindResult.md)
- [BlenderPathSource](flamenco\manager\docs/BlenderPathSource.md)
- [Command](flamenco\manager\docs/Command.md)
- [Error](flamenco\manager\docs/Error.md)
- [EventFarmStatus](flamenco\manager\docs/EventFarmStatus.md)
- [EventJobUpdate](flamenco\manager\docs/EventJobUpdate.md)
- [EventLastRenderedUpdate](flamenco\manager\docs/EventLastRenderedUpdate.md)
- [EventLifeCycle](flamenco\manager\docs/EventLifeCycle.md)
- [EventTaskLogUpdate](flamenco\manager\docs/EventTaskLogUpdate.md)
- [EventTaskUpdate](flamenco\manager\docs/EventTaskUpdate.md)
- [EventWorkerTagUpdate](flamenco\manager\docs/EventWorkerTagUpdate.md)
- [EventWorkerUpdate](flamenco\manager\docs/EventWorkerUpdate.md)
- [FarmStatus](flamenco\manager\docs/FarmStatus.md)
- [FarmStatusReport](flamenco\manager\docs/FarmStatusReport.md)
- [FlamencoVersion](flamenco\manager\docs/FlamencoVersion.md)
- [Job](flamenco\manager\docs/Job.md)
- [JobAllOf](flamenco\manager\docs/JobAllOf.md)
- [JobBlocklist](flamenco\manager\docs/JobBlocklist.md)
- [JobBlocklistEntry](flamenco\manager\docs/JobBlocklistEntry.md)
- [JobDeletionInfo](flamenco\manager\docs/JobDeletionInfo.md)
- [JobLastRenderedImageInfo](flamenco\manager\docs/JobLastRenderedImageInfo.md)
- [JobMassDeletionSelection](flamenco\manager\docs/JobMassDeletionSelection.md)
- [JobMetadata](flamenco\manager\docs/JobMetadata.md)
- [JobPriorityChange](flamenco\manager\docs/JobPriorityChange.md)
- [JobSettings](flamenco\manager\docs/JobSettings.md)
- [JobStatus](flamenco\manager\docs/JobStatus.md)
- [JobStatusChange](flamenco\manager\docs/JobStatusChange.md)
- [JobStorageInfo](flamenco\manager\docs/JobStorageInfo.md)
- [JobTasksSummary](flamenco\manager\docs/JobTasksSummary.md)
- [JobsQuery](flamenco\manager\docs/JobsQuery.md)
- [JobsQueryResult](flamenco\manager\docs/JobsQueryResult.md)
- [LifeCycleEventType](flamenco\manager\docs/LifeCycleEventType.md)
- [ManagerConfiguration](flamenco\manager\docs/ManagerConfiguration.md)
- [ManagerVariable](flamenco\manager\docs/ManagerVariable.md)
- [ManagerVariableAudience](flamenco\manager\docs/ManagerVariableAudience.md)
- [ManagerVariables](flamenco\manager\docs/ManagerVariables.md)
- [MayKeepRunning](flamenco\manager\docs/MayKeepRunning.md)
- [PathCheckInput](flamenco\manager\docs/PathCheckInput.md)
- [PathCheckResult](flamenco\manager\docs/PathCheckResult.md)
- [RegisteredWorker](flamenco\manager\docs/RegisteredWorker.md)
- [SecurityError](flamenco\manager\docs/SecurityError.md)
- [SetupAssistantConfig](flamenco\manager\docs/SetupAssistantConfig.md)
- [ShamanCheckout](flamenco\manager\docs/ShamanCheckout.md)
- [ShamanCheckoutResult](flamenco\manager\docs/ShamanCheckoutResult.md)
- [ShamanFileSpec](flamenco\manager\docs/ShamanFileSpec.md)
- [ShamanFileSpecWithStatus](flamenco\manager\docs/ShamanFileSpecWithStatus.md)
- [ShamanFileStatus](flamenco\manager\docs/ShamanFileStatus.md)
- [ShamanRequirementsRequest](flamenco\manager\docs/ShamanRequirementsRequest.md)
- [ShamanRequirementsResponse](flamenco\manager\docs/ShamanRequirementsResponse.md)
- [ShamanSingleFileStatus](flamenco\manager\docs/ShamanSingleFileStatus.md)
- [SharedStorageLocation](flamenco\manager\docs/SharedStorageLocation.md)
- [SocketIOSubscription](flamenco\manager\docs/SocketIOSubscription.md)
- [SocketIOSubscriptionOperation](flamenco\manager\docs/SocketIOSubscriptionOperation.md)
- [SocketIOSubscriptionType](flamenco\manager\docs/SocketIOSubscriptionType.md)
- [SubmittedJob](flamenco\manager\docs/SubmittedJob.md)
- [Task](flamenco\manager\docs/Task.md)
- [TaskLogInfo](flamenco\manager\docs/TaskLogInfo.md)
- [TaskStatus](flamenco\manager\docs/TaskStatus.md)
- [TaskStatusChange](flamenco\manager\docs/TaskStatusChange.md)
- [TaskSummary](flamenco\manager\docs/TaskSummary.md)
- [TaskUpdate](flamenco\manager\docs/TaskUpdate.md)
- [TaskWorker](flamenco\manager\docs/TaskWorker.md)
- [Worker](flamenco\manager\docs/Worker.md)
- [WorkerAllOf](flamenco\manager\docs/WorkerAllOf.md)
- [WorkerList](flamenco\manager\docs/WorkerList.md)
- [WorkerRegistration](flamenco\manager\docs/WorkerRegistration.md)
- [WorkerSignOn](flamenco\manager\docs/WorkerSignOn.md)
- [WorkerSleepSchedule](flamenco\manager\docs/WorkerSleepSchedule.md)
- [WorkerStateChange](flamenco\manager\docs/WorkerStateChange.md)
- [WorkerStateChanged](flamenco\manager\docs/WorkerStateChanged.md)
- [WorkerStatus](flamenco\manager\docs/WorkerStatus.md)
- [WorkerStatusChangeRequest](flamenco\manager\docs/WorkerStatusChangeRequest.md)
- [WorkerSummary](flamenco\manager\docs/WorkerSummary.md)
- [WorkerTag](flamenco\manager\docs/WorkerTag.md)
- [WorkerTagChangeRequest](flamenco\manager\docs/WorkerTagChangeRequest.md)
- [WorkerTagList](flamenco\manager\docs/WorkerTagList.md)
- [WorkerTask](flamenco\manager\docs/WorkerTask.md)
- [WorkerTaskAllOf](flamenco\manager\docs/WorkerTaskAllOf.md)
- [AssignedTask](flamenco/manager/docs/AssignedTask.md)
- [AvailableJobSetting](flamenco/manager/docs/AvailableJobSetting.md)
- [AvailableJobSettingEvalInfo](flamenco/manager/docs/AvailableJobSettingEvalInfo.md)
- [AvailableJobSettingSubtype](flamenco/manager/docs/AvailableJobSettingSubtype.md)
- [AvailableJobSettingType](flamenco/manager/docs/AvailableJobSettingType.md)
- [AvailableJobSettingVisibility](flamenco/manager/docs/AvailableJobSettingVisibility.md)
- [AvailableJobType](flamenco/manager/docs/AvailableJobType.md)
- [AvailableJobTypes](flamenco/manager/docs/AvailableJobTypes.md)
- [BlenderPathCheckResult](flamenco/manager/docs/BlenderPathCheckResult.md)
- [BlenderPathFindResult](flamenco/manager/docs/BlenderPathFindResult.md)
- [BlenderPathSource](flamenco/manager/docs/BlenderPathSource.md)
- [Command](flamenco/manager/docs/Command.md)
- [Error](flamenco/manager/docs/Error.md)
- [EventFarmStatus](flamenco/manager/docs/EventFarmStatus.md)
- [EventJobUpdate](flamenco/manager/docs/EventJobUpdate.md)
- [EventLastRenderedUpdate](flamenco/manager/docs/EventLastRenderedUpdate.md)
- [EventLifeCycle](flamenco/manager/docs/EventLifeCycle.md)
- [EventTaskLogUpdate](flamenco/manager/docs/EventTaskLogUpdate.md)
- [EventTaskUpdate](flamenco/manager/docs/EventTaskUpdate.md)
- [EventWorkerTagUpdate](flamenco/manager/docs/EventWorkerTagUpdate.md)
- [EventWorkerUpdate](flamenco/manager/docs/EventWorkerUpdate.md)
- [FarmStatus](flamenco/manager/docs/FarmStatus.md)
- [FarmStatusReport](flamenco/manager/docs/FarmStatusReport.md)
- [FlamencoVersion](flamenco/manager/docs/FlamencoVersion.md)
- [Job](flamenco/manager/docs/Job.md)
- [JobAllOf](flamenco/manager/docs/JobAllOf.md)
- [JobBlocklist](flamenco/manager/docs/JobBlocklist.md)
- [JobBlocklistEntry](flamenco/manager/docs/JobBlocklistEntry.md)
- [JobDeletionInfo](flamenco/manager/docs/JobDeletionInfo.md)
- [JobLastRenderedImageInfo](flamenco/manager/docs/JobLastRenderedImageInfo.md)
- [JobMassDeletionSelection](flamenco/manager/docs/JobMassDeletionSelection.md)
- [JobMetadata](flamenco/manager/docs/JobMetadata.md)
- [JobPriorityChange](flamenco/manager/docs/JobPriorityChange.md)
- [JobSettings](flamenco/manager/docs/JobSettings.md)
- [JobStatus](flamenco/manager/docs/JobStatus.md)
- [JobStatusChange](flamenco/manager/docs/JobStatusChange.md)
- [JobStorageInfo](flamenco/manager/docs/JobStorageInfo.md)
- [JobTasksSummary](flamenco/manager/docs/JobTasksSummary.md)
- [JobsQuery](flamenco/manager/docs/JobsQuery.md)
- [JobsQueryResult](flamenco/manager/docs/JobsQueryResult.md)
- [LifeCycleEventType](flamenco/manager/docs/LifeCycleEventType.md)
- [ManagerConfiguration](flamenco/manager/docs/ManagerConfiguration.md)
- [ManagerVariable](flamenco/manager/docs/ManagerVariable.md)
- [ManagerVariableAudience](flamenco/manager/docs/ManagerVariableAudience.md)
- [ManagerVariables](flamenco/manager/docs/ManagerVariables.md)
- [MayKeepRunning](flamenco/manager/docs/MayKeepRunning.md)
- [PathCheckInput](flamenco/manager/docs/PathCheckInput.md)
- [PathCheckResult](flamenco/manager/docs/PathCheckResult.md)
- [RegisteredWorker](flamenco/manager/docs/RegisteredWorker.md)
- [SecurityError](flamenco/manager/docs/SecurityError.md)
- [SetupAssistantConfig](flamenco/manager/docs/SetupAssistantConfig.md)
- [ShamanCheckout](flamenco/manager/docs/ShamanCheckout.md)
- [ShamanCheckoutResult](flamenco/manager/docs/ShamanCheckoutResult.md)
- [ShamanFileSpec](flamenco/manager/docs/ShamanFileSpec.md)
- [ShamanFileSpecWithStatus](flamenco/manager/docs/ShamanFileSpecWithStatus.md)
- [ShamanFileStatus](flamenco/manager/docs/ShamanFileStatus.md)
- [ShamanRequirementsRequest](flamenco/manager/docs/ShamanRequirementsRequest.md)
- [ShamanRequirementsResponse](flamenco/manager/docs/ShamanRequirementsResponse.md)
- [ShamanSingleFileStatus](flamenco/manager/docs/ShamanSingleFileStatus.md)
- [SharedStorageLocation](flamenco/manager/docs/SharedStorageLocation.md)
- [SocketIOSubscription](flamenco/manager/docs/SocketIOSubscription.md)
- [SocketIOSubscriptionOperation](flamenco/manager/docs/SocketIOSubscriptionOperation.md)
- [SocketIOSubscriptionType](flamenco/manager/docs/SocketIOSubscriptionType.md)
- [SubmittedJob](flamenco/manager/docs/SubmittedJob.md)
- [Task](flamenco/manager/docs/Task.md)
- [TaskLogInfo](flamenco/manager/docs/TaskLogInfo.md)
- [TaskStatus](flamenco/manager/docs/TaskStatus.md)
- [TaskStatusChange](flamenco/manager/docs/TaskStatusChange.md)
- [TaskSummary](flamenco/manager/docs/TaskSummary.md)
- [TaskUpdate](flamenco/manager/docs/TaskUpdate.md)
- [TaskWorker](flamenco/manager/docs/TaskWorker.md)
- [Worker](flamenco/manager/docs/Worker.md)
- [WorkerAllOf](flamenco/manager/docs/WorkerAllOf.md)
- [WorkerList](flamenco/manager/docs/WorkerList.md)
- [WorkerRegistration](flamenco/manager/docs/WorkerRegistration.md)
- [WorkerSignOn](flamenco/manager/docs/WorkerSignOn.md)
- [WorkerSleepSchedule](flamenco/manager/docs/WorkerSleepSchedule.md)
- [WorkerStateChange](flamenco/manager/docs/WorkerStateChange.md)
- [WorkerStateChanged](flamenco/manager/docs/WorkerStateChanged.md)
- [WorkerStatus](flamenco/manager/docs/WorkerStatus.md)
- [WorkerStatusChangeRequest](flamenco/manager/docs/WorkerStatusChangeRequest.md)
- [WorkerSummary](flamenco/manager/docs/WorkerSummary.md)
- [WorkerTag](flamenco/manager/docs/WorkerTag.md)
- [WorkerTagChangeRequest](flamenco/manager/docs/WorkerTagChangeRequest.md)
- [WorkerTagList](flamenco/manager/docs/WorkerTagList.md)
- [WorkerTask](flamenco/manager/docs/WorkerTask.md)
- [WorkerTaskAllOf](flamenco/manager/docs/WorkerTaskAllOf.md)
## Documentation For Authorization

View File

@ -116,8 +116,7 @@ func (sm *StateMachine) updateJobAfterTaskStatusChange(
return sm.jobStatusIfAThenB(ctx, logger, job, api.JobStatusCompleted, api.JobStatusRequeueing, "task was queued")
case api.TaskStatusPaused:
// Pausing a task has no impact on the job.
return nil
return sm.updateJobOnTaskStatusPaused(ctx, logger, job)
case api.TaskStatusCanceled:
return sm.updateJobOnTaskStatusCanceled(ctx, logger, job)
@ -180,6 +179,38 @@ func (sm *StateMachine) updateJobOnTaskStatusCanceled(ctx context.Context, logge
return nil
}
// updateJobOnTaskStatusPaused conditionally escalates the pausing of a task to pause the job.
func (sm *StateMachine) updateJobOnTaskStatusPaused(ctx context.Context, logger zerolog.Logger, job *persistence.Job) error {
// If no more tasks can run, pause the job.
numRunnable, _, err := sm.persist.CountTasksOfJobInStatus(ctx, job,
api.TaskStatusActive, api.TaskStatusQueued, api.TaskStatusSoftFailed)
if err != nil {
return err
}
if numRunnable == 0 {
logger.Info().Msg("paused task was last runnable task of job, pausing job")
return sm.JobStatusChange(ctx, job, api.JobStatusPaused, "paused task was last runnable task of job, pausing job")
}
if job.Status == api.JobStatusPauseRequested {
// if the job is in pause-requested state, and all other tasks are paused,
// then the job can be paused.
numPaused, numTotal, err := sm.persist.CountTasksOfJobInStatus(ctx, job, api.TaskStatusPaused)
if err != nil {
return err
}
if numPaused == numTotal {
logger.Info().Msg("all tasks of job are paused, job is paused")
return sm.JobStatusChange(ctx, job, api.JobStatusPaused, "all tasks paused")
}
} else {
// if the job is not in pause-requested state, then some error occurred and the job should be failed.
logger.Info().Msg("task cannot be changed to paused when job is not in pause-requested state")
}
return nil
}
// updateJobOnTaskStatusFailed conditionally escalates the failure of a task to fail the entire job.
func (sm *StateMachine) updateJobOnTaskStatusFailed(ctx context.Context, logger zerolog.Logger, job *persistence.Job) error {
// Count the number of failed tasks. If it is over the threshold, fail the job.
@ -382,6 +413,13 @@ func (sm *StateMachine) updateTasksAfterJobStatusChange(
massTaskUpdate: true,
}, err
case api.JobStatusPauseRequested:
jobStatus, err := sm.pauseTasks(ctx, logger, job)
return tasksUpdateResult{
followingJobStatus: jobStatus,
massTaskUpdate: true,
}, err
case api.JobStatusRequeueing:
jobStatus, err := sm.requeueTasks(ctx, logger, job, oldJobStatus)
return tasksUpdateResult{
@ -435,6 +473,37 @@ func (sm *StateMachine) cancelTasks(
return "", nil
}
func (sm *StateMachine) pauseTasks(
ctx context.Context, logger zerolog.Logger, job *persistence.Job,
) (api.JobStatus, error) {
logger.Info().Msg("pausing tasks of job")
// Any task that might run in the future should get paused.
// Active jobs should remain active until finished
taskStatusesToPause := []api.TaskStatus{
api.TaskStatusActive,
api.TaskStatusQueued,
api.TaskStatusCanceled,
}
err := sm.persist.UpdateJobsTaskStatusesConditional(
ctx, job, taskStatusesToPause, api.TaskStatusPaused,
fmt.Sprintf("Manager paused this task because the job got status %q.", job.Status),
)
if err != nil {
return "", fmt.Errorf("pausing tasks of job %s: %w", job.UUID, err)
}
// If pause was requested, it has now happened, so the job can transition.
if job.Status == api.JobStatusPauseRequested {
logger.Info().Msg("all tasks of job paused, job can go to 'paused' status")
return api.JobStatusPaused, nil
}
// This could mean pause was triggered by failure of the job, in which case the
// job is already in the correct status.
return "", nil
}
// requeueTasks re-queues all tasks of the job.
//
// This function assumes that the current job status is "requeueing".

View File

@ -1680,6 +1680,7 @@ components:
- completed
- failed
- paused
- pause-requested
- queued
- cancel-requested
- requeueing

View File

@ -18,233 +18,234 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
"AQA=",
}

View File

@ -84,6 +84,8 @@ const (
JobStatusFailed JobStatus = "failed"
JobStatusPauseRequested JobStatus = "pause-requested"
JobStatusPaused JobStatus = "paused"
JobStatusQueued JobStatus = "queued"
@ -703,6 +705,9 @@ type SubmittedJob struct {
// Storage info of a job, which Flamenco can use to remove job-related files when necessary.
Storage *JobStorageInfo `json:"storage,omitempty"`
// Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
SubmitAsPaused *bool `json:"submit_as_paused,omitempty"`
// Operating system of the submitter. This is used to recognise two-way variables. This should be a lower-case version of the platform, like "linux", "windows", "darwin", "openbsd", etc. Should be ompatible with Go's `runtime.GOOS`; run `go tool dist list` to get a list of possible platforms.
// As a special case, the platform "manager" can be given, which will be interpreted as "the Manager's platform". This is mostly to make test/debug scripts easier, as they can use a static document on all platforms.
SubmitterPlatform string `json:"submitter_platform"`

View File

@ -8,6 +8,9 @@
<button class="btn delete dangerous" v-on:click="onButtonDeleteConfirmed">Delete</button>
</div>
</div>
<button class="btn pause" :disabled="!jobs.canPause" v-on:click="onButtonPause">
Pause Job
</button>
<button class="btn cancel" :disabled="!jobs.canCancel" v-on:click="onButtonCancel">
Cancel Job
</button>

View File

@ -100,6 +100,9 @@ class Job {
if (data.hasOwnProperty('worker_tag')) {
obj['worker_tag'] = ApiClient.convertToType(data['worker_tag'], 'String');
}
if (data.hasOwnProperty('submit_as_paused')) {
obj['submit_as_paused'] = ApiClient.convertToType(data['submit_as_paused'], 'Boolean');
}
if (data.hasOwnProperty('id')) {
obj['id'] = ApiClient.convertToType(data['id'], 'String');
}
@ -175,6 +178,13 @@ Job.prototype['storage'] = undefined;
*/
Job.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
Job.prototype['submit_as_paused'] = false;
/**
* UUID of the Job
* @member {String} id
@ -253,6 +263,12 @@ SubmittedJob.prototype['storage'] = undefined;
* @member {String} worker_tag
*/
SubmittedJob.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
SubmittedJob.prototype['submit_as_paused'] = false;
// Implement JobAllOf interface:
/**
* UUID of the Job

View File

@ -54,6 +54,13 @@ export default class JobStatus {
"paused" = "paused";
/**
* value: "pause-requested"
* @const
*/
"pause-requested" = "pause-requested";
/**
* value: "queued"
* @const

View File

@ -84,6 +84,9 @@ class SubmittedJob {
if (data.hasOwnProperty('worker_tag')) {
obj['worker_tag'] = ApiClient.convertToType(data['worker_tag'], 'String');
}
if (data.hasOwnProperty('submit_as_paused')) {
obj['submit_as_paused'] = ApiClient.convertToType(data['submit_as_paused'], 'Boolean');
}
}
return obj;
}
@ -141,6 +144,13 @@ SubmittedJob.prototype['storage'] = undefined;
*/
SubmittedJob.prototype['worker_tag'] = undefined;
/**
* Whether to submit this job as paused. This is useful for jobs that should not start immediately, but only after manual intervention.
* @member {Boolean} submit_as_paused
* @default false
*/
SubmittedJob.prototype['submit_as_paused'] = false;

View File

@ -18,6 +18,9 @@ export const useTasks = defineStore('tasks', {
activeTaskID: '',
}),
getters: {
canPause() {
return this._anyTaskWithStatus(['active', 'queued', 'cancelled']);
},
canCancel() {
return this._anyTaskWithStatus(['queued', 'active', 'soft-failed']);
},