Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: rails/solid_queue
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.0.2
Choose a base ref
...
head repository: rails/solid_queue
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.1.0
Choose a head ref
  • 20 commits
  • 20 files changed
  • 7 contributors

Commits on Nov 17, 2024

  1. Configuration menu
    Copy the full SHA
    8cc892d View commit details
    Browse the repository at this point in the history

Commits on Nov 21, 2024

  1. Configuration menu
    Copy the full SHA
    6b32e17 View commit details
    Browse the repository at this point in the history

Commits on Nov 26, 2024

  1. Upgrade mysql2 gem

    I ran into the issues described here when trying to install necessary
    gems to contribute:
    
    brianmario/mysql2#1350
    
    Upgrading seems to have resolved the issue.
    jherdman committed Nov 26, 2024
    Configuration menu
    Copy the full SHA
    d12e7a2 View commit details
    Browse the repository at this point in the history

Commits on Nov 27, 2024

  1. Update README with process errors introduced in #277

    Closes #422. Thanks to @salmonsteak1 for spotting this.
    rosa committed Nov 27, 2024
    Configuration menu
    Copy the full SHA
    c521c6d View commit details
    Browse the repository at this point in the history

Commits on Nov 29, 2024

  1. Bump actionpack from 7.1.3.4 to 7.1.4.1

    Bumps [actionpack](https://github.com/rails/rails) from 7.1.3.4 to 7.1.4.1.
    - [Release notes](https://github.com/rails/rails/releases)
    - [Changelog](https://github.com/rails/rails/blob/v8.0.0/actionpack/CHANGELOG.md)
    - [Commits](rails/rails@v7.1.3.4...v7.1.4.1)
    
    ---
    updated-dependencies:
    - dependency-name: actionpack
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    dependabot[bot] authored and rosa committed Nov 29, 2024
    Configuration menu
    Copy the full SHA
    d56f997 View commit details
    Browse the repository at this point in the history
  2. Bump puma from 6.4.2 to 6.4.3

    Bumps [puma](https://github.com/puma/puma) from 6.4.2 to 6.4.3.
    - [Release notes](https://github.com/puma/puma/releases)
    - [Changelog](https://github.com/puma/puma/blob/master/History.md)
    - [Commits](puma/puma@v6.4.2...v6.4.3)
    
    ---
    updated-dependencies:
    - dependency-name: puma
      dependency-type: direct:development
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    dependabot[bot] authored and rosa committed Nov 29, 2024
    Configuration menu
    Copy the full SHA
    66fdfda View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    857233f View commit details
    Browse the repository at this point in the history
  4. Merge pull request #426 from jherdman/upgrade-mysql2-gem

    Upgrade mysql2 gem
    rosa authored Nov 29, 2024
    Configuration menu
    Copy the full SHA
    aa104e1 View commit details
    Browse the repository at this point in the history

Commits on Dec 1, 2024

  1. Update app/models/solid_queue/queue.rb

    Co-authored-by: Rosa Gutierrez <rosa.ge@gmail.com>
    andersonkrs and rosa authored Dec 1, 2024
    Configuration menu
    Copy the full SHA
    242fd15 View commit details
    Browse the repository at this point in the history
  2. Fix unmemoized method

    andersonkrs committed Dec 1, 2024
    Configuration menu
    Copy the full SHA
    50003ac View commit details
    Browse the repository at this point in the history
  3. Merge pull request #415 from andersonkrs/main

    Add helper method to query the latency on the Queue object
    rosa authored Dec 1, 2024
    Configuration menu
    Copy the full SHA
    fabf713 View commit details
    Browse the repository at this point in the history

Commits on Dec 2, 2024

  1. Configuration menu
    Copy the full SHA
    be8f367 View commit details
    Browse the repository at this point in the history
  2. Minor housekeeping

    * Adds to RVM .ruby-gemset to .gitignore for RVM and gemset holdouts.
    * Updates Gemfile.lock to include arm64-darwin-24 (weird that it's
      missing)
    * Adds 4 development dependencies to quiet deprecation warnings
    * Updates rubocop to allow Ruby 3.3 syntax, matching .ruby-version
    hms committed Dec 2, 2024
    Configuration menu
    Copy the full SHA
    0e5561b View commit details
    Browse the repository at this point in the history
  3. Silence test output for expected exceptions

    SolidQueue has excellent built-in error reporting. While this is
    fantastic for SQ users, it is less than ideal for testing
    SolidQueue because any test that deliberately uses or triggers an
    exception produces voluminous error reporting.
    
    This error reporting is hugely valuable when the exception is
    not expected, but distracting and of limited value for expected
    use-cases, especially when the test confirms the correct outcomes
    via assertions.
    
    This commit adds:
    * A generic test-specific Exception class: ExpectedTestError
      This allows testing for specific exceptions while retaining
      all error reporting infrastructure for unexpected exceptions.
    
    * Two helper methods for silencing on_thread_error output
      These methods accept an Exception or Array(Exception)
      and simply does not call the output mechanism if the
      exception passed to on_thread_error matches.
      This way, any unexpected error during test still
      reports in a highly visible manner while the exceptions
      being tested are validated via assertions.
    
    * Replaces the stock on_thread_error with one that ignores
      ExpectedTextError.  Updated several tests from using
      the ruby stock RuntimeError to ExpectedTestError.
    
    * Configures tests to run with YJIT enabled
      This is to test under likely production deployment configuration,
      not for performance reasons.
    
      Note: With the very recent reporting on M4's crashing on Mac's
      with YJIT enabled, we might want to either defer this change
      or add a conditional to opt in until the problem is resolved.
    hms committed Dec 2, 2024
    Configuration menu
    Copy the full SHA
    6cc550e View commit details
    Browse the repository at this point in the history
  4. Reimplement Interruptible using Thread#queue

    * Replaces a little Unix cleverness with a standard Ruby class.
      This pushes the responsibiity for meeting the SQ requirements
      from SQ to stock Ruby
    
    * Delivers equivelent performance, identical API, and API behaviors
      with the original implementation (see note below on Futures)
    
    * Mostly fixes a *platform / version dependent* issue with
      MySQL (see below)
    
    * Meets 100% of SQ's functional requirements:
    
      * interruptible_sleep: a potentially blocking operation
        interruptible via either a "wake_event" (possibly requested
        prior to entering interruptible_sleep) or blocking until a
        timeout.
    
      * wake_up / interrupt: a Signal#trap and thread-safe method that
        does not require user-level synchronization (with the risk of
        not fully understanding all of the complexities required) code
        that either interrupts an inflight-interruptible_sleep or enqueues
        the event to processed in the invocation of interruptible_sleep
    
    * Interruptible's API is trivially reproduceable via Thread::Queue
      * interruptible_sleep => Queue.pop(timeout:) where pushing anything
        into the queue acts as the interrupt event and timeout is reliable
        without any extra code or exception handling.
    
      * wake_up / interrupt => Queue.push(Anything) is thread, fiber, and
        Signal.trap safe (can be called from anywhere) and captures
        all wake_up events whenever requested, automaticall caching any
        "event" not processed by a currently executing interruptible_sleep
        matching existing functionality exactly.
    
    Why the Future in #interruptible_sleep?
    
    While Thread::Queue micro benchmarks as having the same performance on
    the main thread Vs. any form of a sub-thread (or Fiber) and self-pipe,
    when running the SQ test suite we see a 35% slow down Vs. the original
    self-pipe implenentation.  One assumes this slowdown would manifest
    in production. By moving the just the Queue#pop into a separate thread via
    Concurrent::Promises.future we get +/- identical performance to the original
    self-pipe implementation.
    
    I'm assuming this root causes to Ruby main-thread only housekeeping and/or
    possibly triggering a fast/slow path issue.
    
    Why a Future Vs. Thread#new for each interruptible_sleep call?
    
    Every other threaded operation in SQ is implemented using Concurrent
    Ruby. Using a Future is for code and architectual consistency. There is
    no difference in performance or functionality between the two.
    
    MySQL *only* issues:
    
    There seems to be a *platform specific* or *version specific* problem
    with MySQL database connectivity and/or broken self-pipes leading to
    randomly failing tests and a stream of distracting backtraces *even
    with successful* tests.  Adding to the complexity sometimes, the lost
    database connection can self-heal -- HOWEVER -- this takes time and given
    how much of the test suite has time based assertions, leads to
    additional random test failures.
    
    These, or similar, issues have been observed in the past when changes to
    the MySQL client library forced changes in the mysql2 gem.
    
    With the Thread::Queue based implementation of the Interruptible concern,
    the random failures and amount of spurious output are dramatically
    improved (but not eliminated).
    hms committed Dec 2, 2024
    Configuration menu
    Copy the full SHA
    a152f26 View commit details
    Browse the repository at this point in the history

Commits on Dec 3, 2024

  1. Update debug gem

    The previous version of this gem was struggling with reline.
    jherdman authored and rosa committed Dec 3, 2024
    Configuration menu
    Copy the full SHA
    2e9eab1 View commit details
    Browse the repository at this point in the history
  2. Don't add solid_queue.connects_to configuration more than once

    Or, in other words, make the install generator idempotent.
    
    Inspired by #349
    rosa committed Dec 3, 2024
    Configuration menu
    Copy the full SHA
    76b7eaf View commit details
    Browse the repository at this point in the history
  3. Addresses PR feedback

    * Streamlined a comment in the code
    * Removed unneeded gemspec developer_dependencies that we get handled
      via the upgrade to Rails 7.1.4.1
    * Added a gemspec version dependency required for keyword argument
      support
    * Rebase to main
    hms committed Dec 3, 2024
    Configuration menu
    Copy the full SHA
    17c4cd5 View commit details
    Browse the repository at this point in the history

Commits on Dec 4, 2024

  1. Merge pull request #417 from ikyn-inc/interruptible

    Reimplement Interruptible
    rosa authored Dec 4, 2024
    Configuration menu
    Copy the full SHA
    4f29fc8 View commit details
    Browse the repository at this point in the history

Commits on Dec 5, 2024

  1. Bump solid_queue to 1.1.0

    rosa committed Dec 5, 2024
    Configuration menu
    Copy the full SHA
    18e7b0e View commit details
    Browse the repository at this point in the history
Loading