Retries and failures
When functions fail, Inngest can retry them automatically. Whether Inngest retries your function is determined by how it fails.
Failure detection
There are two ways that functions are determined to have failed:
- A function throws an error:
jsexport default createFunction("My Function", "demo/some.event", ({ event }) => {throw new Error("Something failed!")})
- A function returns a non-
2xx
status code with it's response:
jsexport default createFunction("My Function", "demo/some.event", ({ event }) => {const result = somethingElse()return {status: result.ok ? 200 : 500,body: { message: result.ok ? "success" : "failure" }}})
Retry policies
By default, each function is retried 3 times using exponential backoff with jitter. Retries can be customized using the status
or statusCode
response:
2xx
- Successful: this is not a failure, no retry is necessary4xx
- Bad request: this step will not be retried, as this error is irrecovarble5xx
- Server error: something temporarily failed. This will be retried according to the retry policy (3 times, by default).
We're currently working on implementing custom retry policies per step for step functions, documented in this issue.