fix: ensure jobs do not retry indefinitely by default, fix undefined values in error messages (#9605)

## Fix default retries

By default, if no `retries` property has been set, jobs / tasks should
not be retried. This was not the case previously, as the `maxRetries`
variable was `undefined`, causing jobs to retry endlessly. This PR sets
them to `0` by default.

Additionally, this fixes some undesirable behavior of the workflow
retries property. Workflow retries now act as **maximum**,
workflow-level retries. Only tasks that do not have a retry property set
will inherit the workflow-level retries.

## Fix error messages

Previously, you were able to encounter error messages with undefined
values like these:

![CleanShot 2024-11-28 at 15 23
37@2x](https://github.com/user-attachments/assets/81617ca8-11de-4d35-b9bf-cc6c5bc515be)

Reason is that it was always using `job.workflowSlug` for the error
messages. However, if you queue a task directly, without a workflow,
`job.workflowSlug` is undefined and `job.taskSlug` should be used
instead.

This PR then gets rid of the second undefined value by ensuring that
`maxRetries´ is never undefined
This commit is contained in:
Alessio Gravili
2024-12-02 15:05:48 -07:00
committed by GitHub
parent e4c3c5b1d2
commit a89d54454a
12 changed files with 722 additions and 119 deletions

View File

@@ -43,6 +43,8 @@ export interface Config {
UpdatePost: MyUpdatePostType;
UpdatePostStep2: TaskUpdatePostStep2;
CreateSimple: TaskCreateSimple;
CreateSimpleRetriesUndefined: TaskCreateSimpleRetriesUndefined;
CreateSimpleRetries0: TaskCreateSimpleRetries0;
CreateSimpleWithDuplicateMessage: TaskCreateSimpleWithDuplicateMessage;
ExternalTask: TaskExternalTask;
inline: {
@@ -56,6 +58,11 @@ export interface Config {
retriesTest: WorkflowRetriesTest;
retriesRollbackTest: WorkflowRetriesRollbackTest;
retriesWorkflowLevelTest: WorkflowRetriesWorkflowLevelTest;
workflowNoRetriesSet: WorkflowWorkflowNoRetriesSet;
workflowRetries0: WorkflowWorkflowRetries0;
workflowAndTasksRetriesUndefined: WorkflowWorkflowAndTasksRetriesUndefined;
workflowRetries2TasksRetriesUndefined: WorkflowWorkflowRetries2TasksRetriesUndefined;
workflowRetries2TasksRetries0: WorkflowWorkflowRetries2TasksRetries0;
inlineTaskTest: WorkflowInlineTaskTest;
externalWorkflow: WorkflowExternalWorkflow;
retriesBackoffTest: WorkflowRetriesBackoffTest;
@@ -179,6 +186,8 @@ export interface PayloadJob {
| 'UpdatePost'
| 'UpdatePostStep2'
| 'CreateSimple'
| 'CreateSimpleRetriesUndefined'
| 'CreateSimpleRetries0'
| 'CreateSimpleWithDuplicateMessage'
| 'ExternalTask';
taskID: string;
@@ -220,6 +229,11 @@ export interface PayloadJob {
| 'retriesTest'
| 'retriesRollbackTest'
| 'retriesWorkflowLevelTest'
| 'workflowNoRetriesSet'
| 'workflowRetries0'
| 'workflowAndTasksRetriesUndefined'
| 'workflowRetries2TasksRetriesUndefined'
| 'workflowRetries2TasksRetries0'
| 'inlineTaskTest'
| 'externalWorkflow'
| 'retriesBackoffTest'
@@ -231,6 +245,8 @@ export interface PayloadJob {
| 'UpdatePost'
| 'UpdatePostStep2'
| 'CreateSimple'
| 'CreateSimpleRetriesUndefined'
| 'CreateSimpleRetries0'
| 'CreateSimpleWithDuplicateMessage'
| 'ExternalTask'
)
@@ -443,6 +459,32 @@ export interface TaskCreateSimple {
simpleID: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "TaskCreateSimpleRetriesUndefined".
*/
export interface TaskCreateSimpleRetriesUndefined {
input: {
message: string;
shouldFail?: boolean | null;
};
output: {
simpleID: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "TaskCreateSimpleRetries0".
*/
export interface TaskCreateSimpleRetries0 {
input: {
message: string;
shouldFail?: boolean | null;
};
output: {
simpleID: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "TaskCreateSimpleWithDuplicateMessage".
@@ -515,6 +557,51 @@ export interface WorkflowRetriesWorkflowLevelTest {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowWorkflowNoRetriesSet".
*/
export interface WorkflowWorkflowNoRetriesSet {
input: {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowWorkflowRetries0".
*/
export interface WorkflowWorkflowRetries0 {
input: {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowWorkflowAndTasksRetriesUndefined".
*/
export interface WorkflowWorkflowAndTasksRetriesUndefined {
input: {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowWorkflowRetries2TasksRetriesUndefined".
*/
export interface WorkflowWorkflowRetries2TasksRetriesUndefined {
input: {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowWorkflowRetries2TasksRetries0".
*/
export interface WorkflowWorkflowRetries2TasksRetries0 {
input: {
message: string;
};
}
/**
* This interface was referenced by `Config`'s JSON-Schema
* via the `definition` "WorkflowInlineTaskTest".