Packages
ash_oban
0.8.10
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0-rc.1
0.8.0-rc.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.3-rc.1
0.2.3-rc.0
0.2.2
0.2.1
0.2.0
0.1.14
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
The extension for integrating Ash resources with Oban.
Current section
Files
Jump to
Current section
Files
usage-rules/debugging_and_error_handling.md
<!--
SPDX-FileCopyrightText: 2020 Zach Daniel
SPDX-License-Identifier: MIT
-->
# Debugging and Error Handling
AshOban provides options for debugging and handling errors:
```elixir
trigger :process do
action :process
# Enable detailed debug logging for this trigger
debug? true
# Configure error handling
log_errors? true
log_final_error? true
# Define an action to call after the last attempt has failed
on_error :mark_failed
end
```
You can also enable global debug logging:
```elixir
config :ash_oban, :debug_all_triggers?, true
```
## Snoozing and Cancelling Jobs
From within any action run by a trigger or scheduled action, you can snooze or cancel the Oban job using special error types. These work from both the main action and the `on_error` action.
**Snooze** — re-schedule the job after a delay without consuming a retry attempt:
```elixir
# Via add_error (idiomatic for change functions):
Ash.Changeset.add_error(changeset, AshOban.Errors.SnoozeJob.exception(snooze_for: 60))
# Via raise:
raise AshOban.Errors.SnoozeJob, snooze_for: 60
```
**Cancel** — stop all retries and mark the job as cancelled:
```elixir
# Via add_error:
Ash.Changeset.add_error(changeset, AshOban.Errors.CancelJob.exception(reason: :permanently_invalid))
# Via raise:
raise AshOban.Errors.CancelJob, reason: :permanently_invalid
```