fix: allow specifying queue (#9151)
Allows user to specify a queue when calling `payload.jobs.queue()`. Closes #9133
This commit is contained in:
@@ -13,14 +13,8 @@ export const getDefaultJobsCollection: (config: Config) => CollectionConfig | nu
|
|||||||
const workflowSlugs: Set<string> = new Set()
|
const workflowSlugs: Set<string> = new Set()
|
||||||
const taskSlugs: Set<string> = new Set(['inline'])
|
const taskSlugs: Set<string> = new Set(['inline'])
|
||||||
|
|
||||||
const queueNames: Set<string> = new Set(['default'])
|
|
||||||
|
|
||||||
config.jobs?.workflows.forEach((workflow) => {
|
config.jobs?.workflows.forEach((workflow) => {
|
||||||
workflowSlugs.add(workflow.slug)
|
workflowSlugs.add(workflow.slug)
|
||||||
|
|
||||||
if (workflow.queue) {
|
|
||||||
queueNames.add(workflow.queue)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
config.jobs.tasks.forEach((task) => {
|
config.jobs.tasks.forEach((task) => {
|
||||||
@@ -168,13 +162,12 @@ export const getDefaultJobsCollection: (config: Config) => CollectionConfig | nu
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'queue',
|
name: 'queue',
|
||||||
type: 'select',
|
type: 'text',
|
||||||
admin: {
|
admin: {
|
||||||
position: 'sidebar',
|
position: 'sidebar',
|
||||||
},
|
},
|
||||||
defaultValue: 'default',
|
defaultValue: 'default',
|
||||||
index: true,
|
index: true,
|
||||||
options: [...queueNames],
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'waitUntil',
|
name: 'waitUntil',
|
||||||
|
|||||||
@@ -108,8 +108,9 @@ export type WorkflowConfig<TWorkflowSlugOrInput extends keyof TypedJobs['workflo
|
|||||||
*/
|
*/
|
||||||
label?: string
|
label?: string
|
||||||
/**
|
/**
|
||||||
* Optionally, define the queue name that this workflow should be tied to.
|
* Optionally, define the default queue name that this workflow should be tied to.
|
||||||
* Defaults to "default".
|
* Defaults to "default".
|
||||||
|
* Can be overridden when queuing jobs via Local API.
|
||||||
*/
|
*/
|
||||||
queue?: string
|
queue?: string
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ export const getJobsLocalAPI = (payload: Payload) => ({
|
|||||||
args:
|
args:
|
||||||
| {
|
| {
|
||||||
input: TypedJobs['tasks'][TTaskOrWorkflowSlug]['input']
|
input: TypedJobs['tasks'][TTaskOrWorkflowSlug]['input']
|
||||||
|
queue?: string
|
||||||
req?: PayloadRequest
|
req?: PayloadRequest
|
||||||
// TTaskOrWorkflowlug with keyof TypedJobs['workflows'] removed:
|
// TTaskOrWorkflowlug with keyof TypedJobs['workflows'] removed:
|
||||||
task: TTaskOrWorkflowSlug extends keyof TypedJobs['tasks'] ? TTaskOrWorkflowSlug : never
|
task: TTaskOrWorkflowSlug extends keyof TypedJobs['tasks'] ? TTaskOrWorkflowSlug : never
|
||||||
@@ -24,6 +25,7 @@ export const getJobsLocalAPI = (payload: Payload) => ({
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
input: TypedJobs['workflows'][TTaskOrWorkflowSlug]['input']
|
input: TypedJobs['workflows'][TTaskOrWorkflowSlug]['input']
|
||||||
|
queue?: string
|
||||||
req?: PayloadRequest
|
req?: PayloadRequest
|
||||||
task?: never
|
task?: never
|
||||||
workflow: TTaskOrWorkflowSlug extends keyof TypedJobs['workflows']
|
workflow: TTaskOrWorkflowSlug extends keyof TypedJobs['workflows']
|
||||||
@@ -35,10 +37,25 @@ export const getJobsLocalAPI = (payload: Payload) => ({
|
|||||||
? RunningJob<TTaskOrWorkflowSlug>
|
? RunningJob<TTaskOrWorkflowSlug>
|
||||||
: RunningJobFromTask<TTaskOrWorkflowSlug>
|
: RunningJobFromTask<TTaskOrWorkflowSlug>
|
||||||
> => {
|
> => {
|
||||||
|
let queue: string
|
||||||
|
|
||||||
|
// If user specifies queue, use that
|
||||||
|
if (args.queue) {
|
||||||
|
queue = args.queue
|
||||||
|
} else if (args.workflow) {
|
||||||
|
// Otherwise, if there is a workflow specified, and it has a default queue to use,
|
||||||
|
// use that
|
||||||
|
const workflow = payload.config.jobs?.workflows?.find(({ slug }) => slug === args.workflow)
|
||||||
|
if (workflow?.queue) {
|
||||||
|
queue = workflow.queue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (await payload.create({
|
return (await payload.create({
|
||||||
collection: 'payload-jobs',
|
collection: 'payload-jobs',
|
||||||
data: {
|
data: {
|
||||||
input: args.input,
|
input: args.input,
|
||||||
|
queue,
|
||||||
taskSlug: 'task' in args ? args.task : undefined,
|
taskSlug: 'task' in args ? args.task : undefined,
|
||||||
workflowSlug: 'workflow' in args ? args.workflow : undefined,
|
workflowSlug: 'workflow' in args ? args.workflow : undefined,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ describe('Queues', () => {
|
|||||||
it('ensure job retrying works', async () => {
|
it('ensure job retrying works', async () => {
|
||||||
const job = await payload.jobs.queue({
|
const job = await payload.jobs.queue({
|
||||||
workflow: 'retriesTest',
|
workflow: 'retriesTest',
|
||||||
|
queue: 'default',
|
||||||
input: {
|
input: {
|
||||||
message: 'hello',
|
message: 'hello',
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user