Update dependency shoryuken to v7#11444
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/shoryuken-7.x-lockfile
branch
3 times, most recently
from
May 20, 2026 18:47
fa558dd to
ae4fdd7
Compare
renovate
Bot
force-pushed
the
renovate/shoryuken-7.x-lockfile
branch
from
June 9, 2026 22:23
ae4fdd7 to
428fd71
Compare
renovate
Bot
force-pushed
the
renovate/shoryuken-7.x-lockfile
branch
from
June 17, 2026 06:38
428fd71 to
9e36fe5
Compare
renovate
Bot
force-pushed
the
renovate/shoryuken-7.x-lockfile
branch
from
July 16, 2026 07:15
9e36fe5 to
36aec84
Compare
renovate
Bot
force-pushed
the
renovate/shoryuken-7.x-lockfile
branch
from
July 16, 2026 15:12
36aec84 to
814e638
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
6.2.1→7.0.3Release Notes
phstc/shoryuken (shoryuken)
v7.0.3Compare Source
Feature:
Shoryuken.active_job_fifo_message_deduplicationto opt out of FIFO dedup id generation (mensfeld)message_deduplication_idfrom theserialized job minus
job_id/enqueued_at(#457 / #750), so two distinct enqueues of the same jobclass and arguments within SQS's 5-minute window silently collapse into one - a "skipped message" trap
Shoryuken.active_job_fifo_message_deduplication = falseto stop generating that id, so identicaljobs are no longer silently dropped (rely on the queue's content-based deduplication or explicit ids)
true, preserving the existing behavior; an explicitmessage_deduplication_idis still honoredFix: Polling strategies are now thread-safe, and WeightedRoundRobin unpauses processed queues reliably (mensfeld)
message_processedruns on processor-completion threads (for FIFO queues) whilenext_queue/messages_foundrun on the dispatch thread; they mutate the same state with no synchronization, which is benign on MRI (GVL)
but corrupts state on JRuby/TruffleRuby. Both
WeightedRoundRobinandStrictPrioritynow serialize accesswith a mutex
WeightedRoundRobin#unpause_queuesonly checked the head of the paused list, so a queue marked ready bymessage_processedcould stay stuck behind an earlier-paused queue; it now unpauses the first expired entryanywhere in the list
Fix:
TimerTask#killno longer deadlocks on Ruby 3.2 under concurrent callers (mensfeld)killcalled@thread.killwhile holding@mutex; the timer loop'sensureblock calls@mutex.synchronizeto clear@running, so on Ruby 3.2 (whereThread#killyields the GVLto the killed thread for cleanup before returning) both threads waited on each other forever
Fix: Stopping the launcher no longer destroys the process-global IO executor (mensfeld)
launcher_executorconfigured,Launcher#executorfell back toConcurrent.global_io_executor,and
Launcher#stop/#stop!callshutdown(andkill) on it:iopool(including Shoryuken's own
ShoryukenConcurrentSendAdapter) and prevented starting a fresh launcherin the same process
Concurrent::CachedThreadPool, so stopping it leaves the globalIO executor untouched
Fix:
Queue#delete_messagesnow logs every batch-delete failure and returns a robust boolean (mensfeld)failed.any? { |f| logger.error ... }, which short-circuited after the first failure - so whena batch had multiple failures only the first was logged - and only returned truthy because
Logger#errorhappens to return true (a custom logger returning falsey would have hidden the failure from callers)
failed.any?, soNonRetryableException/AutoDeletereliably seethat some messages may remain and need reprocessing
Fix: Lifecycle events fired in reverse no longer alternate handler order (mensfeld)
Util#fire_eventreversed the stored handler array in place withreverse!, so an event fired morethan once with
reverse: true(e.g.:shutdownviastopthenstop!) flipped order each timeFix: A fatal dispatch error no longer hard-kills an embedded host process (mensfeld)
Manager#handle_dispatch_errorsentProcess.kill('USR1', Process.pid)unconditionally after adispatch error (e.g. SQS still failing once the fetcher exhausted its retries)
Shoryuken::Launcherdirectly has USR1's default disposition, so the whole process - and itsin-flight workers - was terminated
Launcher#healthy?reports the failure; the USR1 signal is only sent in server (CLI) mode, preserving the
supervisor-restart behavior there
Fix: Graceful stop is now bounded by the configured timeout (mensfeld)
Launcher#stop(the soft shutdown behind USR1/TSTP) calledexecutor.wait_for_terminationwith noargument - an unbounded wait - so a single hung worker blocked shutdown forever
Launcher#stopandLauncher#stop!now share ashutdown_executorhelper that waits up toShoryuken.options[:timeout]seconds for in-flight workers, then force-kills the executor so theprocess can exit; the graceful stop still waits for workers, just no longer indefinitely
Docs: Correct the
retry_intervalsexponential backoff documentation (mensfeld)exponential_backoff?docstring claimed retries stop ("before giving up") after the last configuredinterval. They do not: once the intervals are exhausted, the last interval is reused for every later
attempt, and SQS's redrive policy (maxReceiveCount) is what ultimately moves a message to a dead-letter queue
Fix:
CurrentAttributes.persistno longer drops a class when called once per class (mensfeld)persistcalls made the third call reuse
cattr_0and silently overwrite the second class - its attributes werethen never serialized or restored
distinct, stable keys (single-call
persist(A, B, C)keys are unchanged)Fix: Busy-processor accounting no longer breaks when processor completion raises (mensfeld)
Manager#assignchained.then { processor_done }.rescue { processor_done }, so an exception insideprocessor_done(SQS lookups or a polling strategy'smessage_processedcallback) ran completion twicereadyandsilently breaking the configured concurrency limit for the life of the process
ensurearound processing (exactly once), andprocessor_donelogsinstead of leaking exceptions from the FIFO bookkeeping
Fix: Repeated graceful stop no longer deadlocks the process (mensfeld)
Manager#await_dispatching_in_progresspopped a signal queue that received exactly one token,so a second
Launcher#stopblocked forever on an empty queuethe process stuck in the signal loop where even TERM/INT were no longer handled (only SIGKILL worked)
and future waiter; the dispatch chain also releases waiters if the executor rejects a post during
a racing hard shutdown
Fix:
non_retryable_exceptionsis no longer ignored whenretry_intervalsis also configured (mensfeld)ExponentialBackoffRetryswallowed every exception after scheduling a retry, soNonRetryableException(which sits outside it in the default middleware chain) never saw non-retryable errors - poison messages
were retried indefinitely (with the last interval repeated) instead of being deleted immediately
ExponentialBackoffRetrynow re-raises exceptions classified as non-retryable so the message gets deletedNonRetryableException.non_retryable?and shared by both middlewaresEnhancement: Use dynamic Ruby warning category opt-in in test helpers (mensfeld)
Warning[:performance]withWarning.categories-based auto-enablementspec/spec_helper.rbandspec/integrations_helper.rbv7.0.2Compare Source
Enhancement: Replace LocalStack with ElasticMQ for SQS integration tests (mensfeld)
softwaremill/elasticmq-nativeimage (~30MB vs ~1GB+, starts in milliseconds)setup_localstacktosetup_sqsandbin/clean_localstacktobin/clean_sqsFix: Allow custom polling strategy to be configured per-group via
add_group(mensfeld)add_groupnow acceptspolling_strategy:keyword argumentpolling_strategy()reads from the groups hash populated byadd_group, with fallback to raw optionsEnvironmentLoaderpassespolling_strategythrough when parsing YAML group configv7.0.1Compare Source
Enhancement: Add non-retryable exception middleware (Saidbek)
Fix: ActiveJob keyword arguments support (mensfeld)
SQSSendMessageParametersSupport#initialize...) to properly pass all arguments including keyword argumentsFix: Replace
ArgumentErrorwith customFifoDelayNotSupportedErrorfor FIFO delay errorsv7.0.0Compare Source
See the Upgrading to 7.0 guide for detailed migration instructions.
Breaking: Add
Shoryuken::Errorsmodule with domain-specific error classesShoryuken::Errors::BaseErroras base class for all Shoryuken errorsShoryuken::Errors::QueueNotFoundErrorfor non-existent or inaccessible SQS queuesShoryuken::Errors::InvalidConfigurationErrorfor configuration validation failuresShoryuken::Errors::InvalidWorkerRegistrationErrorfor worker registration conflictsShoryuken::Errors::InvalidPollingStrategyErrorfor invalid polling strategy configurationShoryuken::Errors::InvalidEventErrorfor invalid lifecycle event namesShoryuken::Errors::InvalidDelayErrorfor delays exceeding SQS 15-minute maximumShoryuken::Errors::InvalidArnErrorfor invalid ARN formatRemoved:
Shoryuken::ShutdownclassInterruptand executor-level shutdown insteadFix: Raise ArgumentError when using delay with FIFO queues
retry_on(Rails 6.1+ defaults towait: 3.seconds)wait: 0Enhancement: Use fiber-local storage for logging context
Enhancement: Add yard-lint with comprehensive YARD documentation
Enhancement: Add
enqueue_allfor bulk ActiveJob enqueuing (Rails 7.1+)send_message_batchAPIActiveJob.perform_all_laterfor batching multiple jobsEnhancement: Add ActiveJob Continuations support (Rails 8.1+)
stopping?method in ActiveJob adapters to signal graceful shutdownstopping?flagEnhancement: Add CurrentAttributes persistence support
ActiveSupport::CurrentAttributesto flow from enqueue to job executionActiveJob::Argumentsfor serializationrequire 'shoryuken/active_job/current_attributes'andShoryuken::ActiveJob::CurrentAttributes.persist('MyApp::Current')Breaking: Drop support for Ruby 3.1 (EOL March 2025)
Breaking: Remove support for Rails versions older than 7.2
Enhancement: Replace Concurrent::AtomicFixnum with pure Ruby AtomicCounter
Enhancement: Replace Concurrent::AtomicBoolean with pure Ruby AtomicBoolean
Enhancement: Replace Concurrent::Hash with pure Ruby AtomicHash
Enhancement: Replace core class extensions with helper utilities
Enhancement: Implement Zeitwerk autoloading
Enhancement: Increase
SendMessageBatchto 1MB to align with AWSEnhancement: Replace OpenStruct usage with Struct for inline execution
Enhancement: Configure server side logging (BenMorganMY)
Enhancement: Use -1 as thread priority
Enhancement: Add Support for message_attributes to InlineExecutor
Enhancement: Introduce trusted publishing
Enhancement: Add enqueue_after_transaction_commit? for Rails 7.2 compatibility
Enhancement: Bring Ruby 3.4 into the CI
Fix integration tests by updating aws-sdk-sqs and replacing moto with LocalStack
Breaking: Remove support of Ruby versions older than 3.1
Breaking: Remove support of Rails versions older than 7.0
Breaking: Require
aws-sdk-sqs>=1.66:Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.