Bug Fixes
-
[Testing] Use the Smart engine in
perform_job/3
Testing recorded workers with
perform_job/3
caused an error due to an engine mismatch. Nowperform_job/3
defaults to the Smart engine to more closely mimic production.
[Testing] Use the Smart engine in perform_job/3
Testing recorded workers with perform_job/3
caused an error due to an engine mismatch. Now
perform_job/3
defaults to the Smart engine to more closely mimic production.
[DynamicPruner] Compare against the scheduled_at
timestamp for all states.
This matches similar changes to the Pruner in Oban v2.15.3 with this message:
The previous pruning query checked a different timestamp field for each prunable state, e.g.
cancelled
used cancelled_at
. There aren’t any indexes for those timestamps, let alone the
combination of each state and timestamp, which led to slow pruning queries in larger databases.
[Worker] Verify the Smart
engine is used to run recorded
jobs.
Recorded jobs will run with the Basic engine, but nothing is recorded. Now, rather than silently failing, it returns an error tuple with a helfpul message.
[Smart] Validate the presence of :fields
when :keys
is set for partitions.
Partitions require one or more :fields
, but defaulted to an empty list. The empty list was
ignored and limiters fell back to a non-partitioned mode.
[Smart] Safely cancel orphaned jobs from brand new global queues.
Cancelling orphaned jobs from a queue that matches a currently running queue would cause an
update failure: Postgrex.Error: ERROR 23502 (not_null_violation)
.
The failure was due to an unhandled null
case when attempting to decrement the tracked global
count. This fixes the unhandled case while also preventing attempts to track jobs on “dead”
producers entirely.
[DynamicCron] Include String.t
as a possible error value
Both delete/2
and update/3
may return a “not found” string when a cron entry isn’t found.
The v1.0 release contains absolutely no features or bug fixes, purely some deprecation cleanup and a renamed Smart engine.
Firstly, if your Pro version is behind v0.14, then the best method is to upgrade to Pro v0.14 and address any lingering deprecation warnings. You’re ready to move on once you’ve handled older deprecation warnings!
All renamed or removed modules are also outlined below in deprecation cleanup.
The SmartEngine
moved into an Engines
namespace for parity with Oban’s engines. Rename any SmartEngine
instances in your configuration:
- engine: Oban.Pro.Queue.SmartEngine
+ engine: Oban.Pro.Engines.Smart
Reference the Smart engine docs in their new home under the modules tab.
The structured: ...
option for defining the expected argument structure was replaced with args_schema
in Pro v0.14. The translation mechanism that converted structured
options into the corresponding args_schema
is removed in v1.0, and you must update any structured workers:
- use Oban.Pro.Worker, structured: [keys: [:id, :account_id], required: [:id]]
+ use Oban.Pro.Worker
+
+ args_schema do
+ field :id, :id, required: true
+ field :account_id, :id
+ end
The args_schema
syntax is far more robust than the old structured: ...
keyword mechanism, so take some time to explore the Structured Jobs docs.
[Oban.Pro.Queue.SmartEngine] Renamed to Oban.Pro.Engines.Smart
.
[Oban.Pro.Worker] No longer supports :structured
opts, use args_schema
instead.
[Oban.Pro.Plugins.BatchManager] Removed, you can delete it from your supervision tree.
[Oban.Pro.Plugins.Relay] Renamed to Oban.Pro.Relay
, not needed in your supervision tree.
[Oban.Pro.Notifiers.PG] Moved to Oban core, use Oban.Notifiers.PG
instead.
[Oban.Pro.Plugins.Lifeline] Renamed to Oban.Pro.Plugins.DynamicLifeline
.
[Oban.Pro.Plugins.Reprioritizer] Renamed to Oban.Pro.Plugins.DynamicPrioritizer
.
[Oban.Pro.Testing] The process_job/3
alias for perform_job/3
was removed.