oban v0.4.0 Release Notes
Release Date: 2019-06-10 // almost 5 years ago-
➕ Added
✅ [Oban] Add
Oban.drain_queue/1
to help with integration testing. Draining a queue synchronously executes all available jobs in the queue from within the calling process. This avoids any sandbox based database connection issues and prevents race conditions from asynchronous processing.👷 [Oban.Worker] Add
backoff/1
callback and switch to exponential backoff with a base value as the default. This allows custom backoff timing for individual workers.0️⃣ [Oban.Telemetry] Added a new module to wrap a default handler for structured JSON logging. The log handler is attached by calling
Oban.Telemetry.attach_default_logger/0
somewhere in your application code.[Oban.Queue.Producer] Guard against Postgrex errors in all producer queries using a circuit breaker. Failing queries will no longer crash the producer. Instead, the failure will be logged as an error and it will trip the producer's circuit breaker. All subsequent queries will be skipped until the breaker is enabled again approximately a minute later.
This feature simplifies the deployment process by allowing the application to boot and stay up while Oban migrations are made. After migrations have finished each queue producer will resume making queries.
🔄 Changed
[Oban] Telemetry events now report timing as
%{duration: duration}
instead of%{timing: timing}
. This aligns with thetelemetry
standard of usingduration
for the time to execute something.[Oban] Telemetry events are now broken into
success
andfailure
at the event level, rather than being labeled in the metadata. The full event names are now[:oban, :success]
and[:oban, :failure]
.⏱ [Oban.Job] Rename
scheduled_in
toschedule_in
for readability and consistency. Both theOban
docs and README showedschedule_in
, which reads more clearly thanscheduled_in
.[Oban.Pruner] Pruning no longer happens immediately on startup and may be configured through the
:prune_interval
option. The default prune interval is still one minute.
🛠 Fixed
- [Oban.Migrations] Make partial migrations more resilient by guarding against missing versions and using idempotent statements.