Skip to content

Latest commit

 

History

History
317 lines (177 loc) · 14 KB

File metadata and controls

317 lines (177 loc) · 14 KB

Main (unreleased)

Breaking Changes

nil

Changes

nil

Features

nil

Bug fixes

nil

v1.15.0 (Jun 4, 2026)

Features

  • 715 - Add support for keyword arguments in build_enumerator and each_iteration while preserving positional params Hash compatibility for existing jobs. This compatibility path is transitional; migrate jobs away from positional params Hash signatures paired with perform_later(keyword: value).

v1.14.0 (May 14, 2026)

Breaking Changes

  • 704 - Drop support for Rails 7.0. The minimum supported Rails version is now 7.1.

Features

  • 702 - Add support for parallel iteration with enumerator_builder.parallel. This enqueues multiple jobs, allowing you to split up the work across multiple instances.
  • 705 - Add support for parallel array iteration with enumerator_builder.parallel_array.
  • 706 - Add support for parallel Active Record relation iteration with enumerator_builder.parallel_active_record_on_records and enumerator_builder.parallel_active_record_on_batches.

Bug fixes

  • 709 - Fix an issue with parallel iteration when instances changed after child jobs were enqueued.

v1.13.1 (Apr 28, 2026)

Bug fixes

  • #699 - Fix tapioca compiler dropping empty FixedHash {} params.

v1.13.0 (Mar 23, 2026)

Breaking Changes

  • 673 - Drop support for Ruby 3.0 and Rails 6.1. The minimum supported Ruby version is now 3.1 and the minimum supported Rails version is now 7.0.

Changes

nil

Features

  • 683 Add support for logging interruption reasons from the interruption_adapters and job_should_exit? hooks

Bug fixes

nil

v1.12.0 (Jan 16, 2026)

Features

  • 650 Add support for batch enumeration over models with composite primary keys.

Bug fixes

  • 652 Fix ISO8601 serialization for Date columns in ActiveRecord enumerators.

v1.11.0 (Jul 14, 2025)

Security fixes

  • 595 [CVE-2025-53623] Fixes a security issue in the CSVEnumerator where the filename was directly interpolated into a bash command.

Bug fixes

  • 590 Fix a compatibilty issue between the Sorbet DSL compiler and the latest Tapioca.
  • 593 Properly support required and optional positional arguments in the Sorbet DSL compiler.
  • 594 Clean up the size calculation in the CSVEnumerator.

v1.10.0 (Mar 20, 2025)

Breaking Changes

  • 544 - Drop support for Ruby 2.6 and 2.7, and Rails 5.2 and 6.0. The minimum supported Ruby version is now 3.0, and the minimum supported Rails version is 6.1.

Features

  • 547 Add interruption adapter for DelayedJob.
  • 556 Add support for generic job classes in the Tapioca Sorbet compiler.

v1.9.0 (Feb 3, 2025)

Features

  • 533 Added a custom compiler for Tapioca that generates Sorbet types for MyJob.perform_later if MyJob includes JobIteration::Iteration and has defined a type for build_enumerator.

v1.8.0 (Dec 10, 2024)

Changes

  • 513 Deprecate returning enumerators from build_enumerator that are not wrapped with enumerator_builder.wrap. The built-in enumerator builders now always wrap.

Features

  • 340 Add cursor.iteration instrumentation for the query to fetch the next batch of records for the Active Record cursor.
  • 523 Add interruption adapter for aws-activejob-sqs.

Bug fixes

  • 515 Fix size of array enumerators.

v1.7.0 (Oct 11, 2024)

Features

  • 509 - Added CSV batching functionality to EnumeratorBuilder with build_csv_enumerator_on_batches method and csv_on_batches alias.
  • 512 - Added support for custom timezones on ActiveRecordEnumerator and ActiveRecordBatchEnumerator. This allows for using cursors with datetime columns where ActiveRecord.default_timezone is set to :local and Active Record is not using the same timezone as the database.

v1.6.0 (Sep 24, 2024)

Features

v1.5.1 (May 29,2024)

Bug fixes

v1.5.0 (May 29, 2024)

Changes

  • 437 - Use minimum between per-class job_iteration_max_job_runtime and JobIteration.max_job_runtime, instead of enforcing only setting decreasing values. Because it is possible to change the global or parent values after setting the value on a class, it is not possible to truly enforce the decreasing value constraint. Instead, we now use the minimum between the global value and per-class value. This is considered a non-breaking change, as it should not break any existing code, it only removes the constraint on new classes.
  • 443 - Use Sidekiq :quit callback to detect graceful shutdown. This makes job-iteration compatible with Sidekiq run in embedded mode.
  • 445 - Add the around_iterate callback, which runs around each call of each_iteration. This adds extensibility to build some generic handlers, such as metrics collection and logging.
  • 450 - Infer which interruption adapter to use from the queue adapter of the job. This deprecates setting JobIteration.interruption_adapter = <callable>, in favor of JobIteration.register_interruption_adapter(<queue adapter name>, <callable>). JobIteration.interruption_adapter will be removed in a future release.

Bug fixes

  • 437 - Defer reading JobIteration.max_job_runtime until runtime, instead of closing around the value at the time of job definition.
  • 431 - Use #id_value instead of send(:id) when generating position for cursor based on :id column (Rails 7.1 and above, where composite primary models are now supported). This ensures we grab the value of the id column, rather than a potentially composite primary key value.
  • 456 - Use Arel to generate SQL that's type compatible for the cursor pagination conditionals in ActiveRecord cursor. Previously, the cursor would coerce numeric ids to a string value (e.g.: ... AND id > '1')

v1.4.1 (Sep 5, 2023)

Bug fixes

  • 427 - Use the Rails application logger. Changes from 338 resulted in logging to the original value of ActiveJob.logger, not the one configured by the Rails application.

v1.4.0 (Aug 23, 2023)

Changes

  • 338 - All logs are now ActiveSupport::Notifications events and logged using ActiveSupport::LogSubscriber to allow customization. Events now always include the cursor_position tag.
  • 418 - Return nil from Iteration#perform, to signal not to rely on return value.

Features

  • 240 - Allow setting inheritable per-job job_iteration_max_job_runtime
  • 310 - Support nested iteration
  • 341 - Add JobIteration.default_retry_backoff, which sets a default delay when jobs are re-enqueued after being interrupted. Defaults to nil, meaning no delay, which matches the current behaviour.
  • 365 - Support composite primary key as a cursor

Bug fixes

  • 289 - Fix uninitialized constant error when raising ConditionNotSupportedError from ActiveRecordBatchEnumerator
  • 346 - Include failed jobs in total_time
  • 417 - Ensure that numerical values are deserialized as such and not as strings.

v1.3.6 (Mar 9, 2022)

  • 190 - Fix updating times_interrupted and total_time when job is throttled

v1.3.5 (Feb 10, 2022)

  • 183 - Add JobIteration::EnumeratorBuilder#build_csv_enumerator

v1.3.4 (Jan 18, 2022)

  • 174 - Fix Ruby 3.2 compatibility

v1.3.3 (Nov 17, 2021)

  • 153 - Re-enqueue jobs only after shutdown hooks have run

v1.3.2 (Nov 12, 2021)

  • 148 - Revert "Do not evaluate enumerator when throttled", due to backwards incompatibility.

v1.3.1 (Nov 11, 2021)

  • 87 - Do not evaluate enumerator when throttled (REVERTED)

v1.3.0 (Oct 7, 2021)

  • 133 - Moves attributes out of JobIteration::Iteration included block

v1.2.0 (Sept 21, 2021)

  • 107 - Remove broken links from README
  • 108 - Drop support for ruby 2.5
  • 110 - Update rubocop TargetRubyVersion

v1.1.14 (May 28, 2021)

Bug fix

  • 84 - Call adjust_total_time before running on_complete callbacks
  • 94 - Remove unnecessary break
  • 95 - ActiveRecordBatchEnumerator#each should rewind at the end
  • 97 - Batch enumerator size returns the number of batches, not records

v1.1.13 (May 20, 2021)

New feature

  • 91 - Add enumerator yielding batches as Active Record Relations

v1.1.12 (April 19, 2021)

Bug fix

  • 77 - Defer enforce cursor be serializable until 2.0.0

v1.1.11 (April 19, 2021)

Bug fix

  • 73 - Enforce cursor be serializable This is reverted in 1.1.12 as it breaks behaviour in some apps.

v1.1.10 (March 30, 2021)

  • 69 - Fix memory leak in ActiveRecordCursor

v1.1.9 (January 6, 2021)

  • 61 - Call super in method_added

v1.1.8 (June 8, 2020)

  • Preserve ruby2_keywords tags in arguments on Ruby 2.7

v1.1.7 (June 4, 2020)

  • 54 - Fix warnings on Ruby 2.7

v1.1.6 (May 22, 2020)

  • 49 - Log when enumerator has nothing to iterate
  • 52 - Fix CSVEnumerator cursor to properly remove already processed rows

v1.1.5 (February 27, 2020)

  • 47 - Optional sorbet-runtime support for JobIteration::Iteration interface validation

v1.1.4 (December 13, 2019)

  • 45 - Add Throttle enumerator

v1.1.3 (August 20, 2019)

  • 36 - Check method validation at job initialization step

v1.1.2 (July 24, 2019)

Bug fix

  • 36 - Fix CsvEnumerator for Ruby 2.6.3

v1.1.1 (July 22, 2019)

Bug fix

  • 36 - Add case for using default keyword arguments for cursor in #build_enumerator

v1.1.0 (July 17, 2019)

New feature

  • 35 - Raise exception if malformed arguments are use in #build_enumerator

v1.0.0 (April 29, 2019)

It’s been in production at Shopify since 2017. It has support for Rails 5 and 6 🎉

Deprecations

  • 34 - remove supports_interruption?

Internal

  • 30 - Better #each_iteration argument names

v0.9.8 (December 5, 2018)

Bug fix

  • 27 - iteration: don't allow double-retrying a job

v0.9.7 (November 30, 2018)

New feature

  • 23 - Remove upperbound constraint on ActiveJob