diff --git a/ruby/CHANGELOG.md b/ruby/CHANGELOG.md index 21ff2795d..820579cfc 100644 --- a/ruby/CHANGELOG.md +++ b/ruby/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.14.0] - 2026-10-26 + ### Added - Receive Postgres and SQLite notifications for insertions, queue controls, cancellation, and leadership handoffs, with reconnect recovery and a `poll_only` option. [PR #1496](https://github.com/riverqueue/river/pull/1496). @@ -22,13 +24,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - The scheduler no longer opens a savepoint for each due job to catch unique key conflicts. A pass that made more than 64 jobs available overflowed the Postgres subtransaction cache, which can slow queries across the server. The scheduler now finds conflicts with one statement on Postgres and checks before each write on SQLite. Conflicting jobs are still discarded with `unique_key_conflict: scheduler_discarded` metadata. On Postgres, the scheduler now waits for a due job that another transaction has locked, instead of skipping it. [PR #1544](https://github.com/riverqueue/river/pull/1544). - - Default periodic jobs to their occurrence time, preserving constructor and argument-level schedules. [PR #1537](https://github.com/riverqueue/river/pull/1537). - - Fail retries that omit a saved cursor-only step, while preserving their checkpoints for recovery. Jobs with an existing step marker retain their behavior, including legacy stale cursor entries. [PR #1534](https://github.com/riverqueue/river/pull/1534). - - Support large SQLite metadata updates without reaching the expression-depth limit, preserving top-level replacement and JSON null values. [PR #1533](https://github.com/riverqueue/river/pull/1533). - - A `River::Config` without an explicit `id:` generates its default client ID on first use in each process, so clients built before a fork (as with preloading Puma, Unicorn, or Pitchfork servers) no longer share one ID across forked workers. Explicit IDs are unchanged, and `Config#with` copies share the original's ID. [PR #1498](https://github.com/riverqueue/river/pull/1498). - Inserting a job stores its encoded args as given instead of decoding and re-encoding them in Ruby, which rewrote numbers like `1.10` as `1.1` and `1e3` as `1000.0` and rounded digits beyond `Float` precision. Postgres applies its usual `jsonb` normalization, and SQLite keeps the encoded bytes, matching River's Go drivers. Affects Active Record on Postgres and SQLite, and Sequel on SQLite. [PR #1503](https://github.com/riverqueue/river/pull/1503). - Wake workers when scheduled jobs become available or jobs are manually retried, including workers in other clients. [PR #1496](https://github.com/riverqueue/river/pull/1496). @@ -158,7 +156,7 @@ Users should upgrade backends to River v0.12.0 before upgrading this library in This updated implementation is significantly faster due to the removal of advisory locks in favor of an index-backed uniqueness system, while allowing some flexibility in which job states are considered. However, not all states may be removed from consideration when using the `by_state` option; pending, scheduled, available, and running states are required whenever customizing this list. [PR #32](https://github.com/riverqueue/riverqueue-ruby/pull/32). -- Update REXML dependency. [PR #28](https://github.com/riverqueue/riverqueue-ruby/pull/36). +- Update REXML dependency. [PR #36](https://github.com/riverqueue/riverqueue-ruby/pull/36). ## [0.7.0] - 2024-08-30 @@ -183,7 +181,7 @@ Users should upgrade backends to River v0.12.0 before upgrading this library in ### Changed - Tag format is now checked on insert. Tags should be no more than 255 characters and match the regex `/\A[\w][\w\-]+[\w]\z/`. [PR #22](https://github.com/riverqueue/riverqueue-ruby/pull/22). -- Returned jobs now have a `metadata` property. [PR #21](https://github.com/riverqueue/riverqueue-ruby/pull/22). +- Returned jobs now have a `metadata` property. [PR #22](https://github.com/riverqueue/riverqueue-ruby/pull/22). ## [0.4.0] - 2024-04-28 diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock index d23a3092b..33522dd75 100644 --- a/ruby/Gemfile.lock +++ b/ruby/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - riverqueue (0.13.0) + riverqueue (0.14.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,16 +10,16 @@ PATH PATH remote: driver/riverqueue-activerecord specs: - riverqueue-activerecord (0.13.0) + riverqueue-activerecord (0.14.0) activerecord (>= 7.2, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.13.0) + riverqueue (= 0.14.0) PATH remote: driver/riverqueue-sequel specs: - riverqueue-sequel (0.13.0) - riverqueue (= 0.13.0) + riverqueue-sequel (0.14.0) + riverqueue (= 0.14.0) sequel (>= 5.20, < 1000) GEM diff --git a/ruby/driver/riverqueue-activerecord/Gemfile.lock b/ruby/driver/riverqueue-activerecord/Gemfile.lock index 32ea4d1a8..3deb25930 100644 --- a/ruby/driver/riverqueue-activerecord/Gemfile.lock +++ b/ruby/driver/riverqueue-activerecord/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - riverqueue (0.13.0) + riverqueue (0.14.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,10 +10,10 @@ PATH PATH remote: . specs: - riverqueue-activerecord (0.13.0) + riverqueue-activerecord (0.14.0) activerecord (>= 7.2, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.13.0) + riverqueue (= 0.14.0) GEM remote: https://rubygems.org/ diff --git a/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec b/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec index b16a38c91..b979c0910 100644 --- a/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec +++ b/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-activerecord" - s.version = "0.13.0" + s.version = "0.14.0" s.summary = "ActiveRecord Postgres and SQLite driver for the River Ruby gem." s.description = "ActiveRecord Postgres and SQLite driver for inserting and working River jobs in Ruby." s.authors = ["Blake Gentry", "Brandur Leach"] diff --git a/ruby/driver/riverqueue-sequel/Gemfile.lock b/ruby/driver/riverqueue-sequel/Gemfile.lock index 99d44b245..f5cc93e71 100644 --- a/ruby/driver/riverqueue-sequel/Gemfile.lock +++ b/ruby/driver/riverqueue-sequel/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - riverqueue (0.13.0) + riverqueue (0.14.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,8 +10,8 @@ PATH PATH remote: . specs: - riverqueue-sequel (0.13.0) - riverqueue (= 0.13.0) + riverqueue-sequel (0.14.0) + riverqueue (= 0.14.0) sequel (>= 5.20, < 1000) GEM diff --git a/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec b/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec index 125c7cb83..203536061 100644 --- a/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec +++ b/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-sequel" - s.version = "0.13.0" + s.version = "0.14.0" s.summary = "Sequel Postgres and SQLite driver for the River Ruby gem." s.description = "Sequel Postgres and SQLite driver for inserting and working River jobs in Ruby." s.authors = ["Blake Gentry", "Brandur Leach"] diff --git a/ruby/rails/riverqueue-rails/Gemfile.lock b/ruby/rails/riverqueue-rails/Gemfile.lock index 61f251102..a652fd856 100644 --- a/ruby/rails/riverqueue-rails/Gemfile.lock +++ b/ruby/rails/riverqueue-rails/Gemfile.lock @@ -1,15 +1,15 @@ PATH remote: ../../driver/riverqueue-activerecord specs: - riverqueue-activerecord (0.13.0) + riverqueue-activerecord (0.14.0) activerecord (>= 7.2, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.13.0) + riverqueue (= 0.14.0) PATH remote: ../.. specs: - riverqueue (0.13.0) + riverqueue (0.14.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -18,10 +18,10 @@ PATH PATH remote: . specs: - riverqueue-rails (0.13.0) + riverqueue-rails (0.14.0) activejob (>= 7.2, < 8.2) railties (>= 7.2, < 8.2) - riverqueue-activerecord (= 0.13.0) + riverqueue-activerecord (= 0.14.0) GEM remote: https://rubygems.org/ @@ -343,9 +343,9 @@ CHECKSUMS rdoc (8.0.0) sha256=03bf8c08a9639658855a0cfd77c0abca8325c227693f7f33f82957811348c469 regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d - riverqueue (0.13.0) - riverqueue-activerecord (0.13.0) - riverqueue-rails (0.13.0) + riverqueue (0.14.0) + riverqueue-activerecord (0.14.0) + riverqueue-rails (0.14.0) rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c diff --git a/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec b/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec index f259ef4dd..898d2dbc5 100644 --- a/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec +++ b/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-rails" - s.version = "0.13.0" + s.version = "0.14.0" s.summary = "Active Job and Rails integration for River." s.authors = ["Blake Gentry", "Brandur Leach"] s.files = Dir.glob("lib/**/*") + ["README.md"] diff --git a/ruby/riverqueue.gemspec b/ruby/riverqueue.gemspec index 291c0119a..ff52c42e9 100644 --- a/ruby/riverqueue.gemspec +++ b/ruby/riverqueue.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue" - s.version = "0.13.0" + s.version = "0.14.0" s.summary = "A fast, reliable job queue for Ruby backed by Postgres or SQLite." s.description = "Insert and work River jobs in Ruby using the same schema and state machine as other River clients. Use with riverqueue-activerecord or riverqueue-sequel." s.authors = ["Blake Gentry", "Brandur Leach"]