Open
Conversation
Bumps [sentry-ruby](https://github.com/getsentry/sentry-ruby) from 5.26.0 to 6.5.0. - [Release notes](https://github.com/getsentry/sentry-ruby/releases) - [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md) - [Commits](getsentry/sentry-ruby@5.26.0...6.5.0) --- updated-dependencies: - dependency-name: sentry-ruby dependency-version: 6.5.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Contributor
4 similar comments
Contributor
Contributor
Contributor
Contributor
Contributor
gem compare concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT date:
1.3.5: 2025-01-15 00:00:00 UTC
1.3.6: 2025-12-13 00:00:00 UTC
DIFFERENT rubygems_version:
1.3.5: 3.3.26
1.3.6: 3.3.27
DIFFERENT version:
1.3.5: 1.3.5
1.3.6: 1.3.6
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
* Changed:
CHANGELOG.md +6/-0
README.md +4/-2
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
lib/concurrent-ruby/concurrent/executors.rb +0/-1
lib/concurrent-ruby/concurrent/mvar.rb +4/-4
lib/concurrent-ruby/concurrent/promise.rb +1/-1
lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
lib/concurrent-ruby/concurrent/version.rb +1/-1
DIFFERENT extra_rdoc_files:
1.3.5->1.3.6:
* Changed:
README.md +4/-2
CHANGELOG.md +6/-0 |
1 similar comment
Contributor
gem compare concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT date:
1.3.5: 2025-01-15 00:00:00 UTC
1.3.6: 2025-12-13 00:00:00 UTC
DIFFERENT rubygems_version:
1.3.5: 3.3.26
1.3.6: 3.3.27
DIFFERENT version:
1.3.5: 1.3.5
1.3.6: 1.3.6
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
* Changed:
CHANGELOG.md +6/-0
README.md +4/-2
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
lib/concurrent-ruby/concurrent/executors.rb +0/-1
lib/concurrent-ruby/concurrent/mvar.rb +4/-4
lib/concurrent-ruby/concurrent/promise.rb +1/-1
lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
lib/concurrent-ruby/concurrent/version.rb +1/-1
DIFFERENT extra_rdoc_files:
1.3.5->1.3.6:
* Changed:
README.md +4/-2
CHANGELOG.md +6/-0 |
Contributor
gem compare --diff concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
--- /tmp/20260317-889-zq5fjk 2026-03-17 03:33:10.964914254 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb 2026-03-17 03:33:10.953914316 +0000
@@ -0,0 +1,55 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro ruby_timeout_queue
+ class RubyTimeoutQueue < ::Queue
+ def initialize(*args)
+ if RUBY_VERSION >= '3.2'
+ raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
+ end
+
+ super(*args)
+
+ @mutex = Mutex.new
+ @cond_var = ConditionVariable.new
+ end
+
+ def push(obj)
+ @mutex.synchronize do
+ super(obj)
+ @cond_var.signal
+ end
+ end
+ alias_method :enq, :push
+ alias_method :<<, :push
+
+ def pop(non_block = false, timeout: nil)
+ if non_block && timeout
+ raise ArgumentError, "can't set a timeout if non_block is enabled"
+ end
+
+ if non_block
+ super(true)
+ elsif timeout
+ @mutex.synchronize do
+ deadline = Concurrent.monotonic_time + timeout
+ while (now = Concurrent.monotonic_time) < deadline && empty?
+ @cond_var.wait(@mutex, deadline - now)
+ end
+ begin
+ return super(true)
+ rescue ThreadError
+ # still empty
+ nil
+ end
+ end
+ else
+ super(false)
+ end
+ end
+ alias_method :deq, :pop
+ alias_method :shift, :pop
+ end
+ private_constant :RubyTimeoutQueue
+ end
+end
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
--- /tmp/20260317-889-mo643n 2026-03-17 03:33:10.966914243 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb 2026-03-17 03:33:10.953914316 +0000
@@ -0,0 +1,18 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro internal_implementation_note
+ TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
+ ::Queue
+ else
+ require 'concurrent/collection/ruby_timeout_queue'
+ RubyTimeoutQueue
+ end
+ private_constant :TimeoutQueueImplementation
+
+ # @!visibility private
+ # @!macro timeout_queue
+ class TimeoutQueue < TimeoutQueueImplementation
+ end
+ end
+end
* Changed:
CHANGELOG.md
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/CHANGELOG.md 2026-03-17 03:33:10.924914480 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/CHANGELOG.md 2026-03-17 03:33:10.944914367 +0000
@@ -2,0 +3,6 @@
+## Release v1.3.6 (13 December 2025)
+
+concurrent-ruby:
+
+* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
+
README.md
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/README.md 2026-03-17 03:33:10.924914480 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/README.md 2026-03-17 03:33:10.944914367 +0000
@@ -210 +210 @@
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+keep backward compatibility (they may also lack tests and documentation). Semantic versions will
@@ -361 +361,2 @@
-* Install Docker, required for Windows builds
+* Install Docker or Podman, required for Windows builds
+* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
@@ -380,0 +382 @@
+* [Joshua Young](https://github.com/joshuay03)
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:10.931914441 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:10.951914327 +0000
@@ -8,0 +9 @@
+ return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
lib/concurrent-ruby/concurrent/concurrent_ruby.jar
Binary files /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:10.936914412 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:10.956914299 +0000
@@ -84,4 +84,2 @@
- # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
- # pool will auto-prune each time a new job is posted. You will need to call
- # this method explicitly in case your application post jobs in bursts (a
- # lot of jobs and then nothing for long periods)
+ # This is a no-op on all pool implementations as they prune themselves
+ # automatically, and has been deprecated.
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:10.937914407 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:10.956914299 +0000
@@ -48,0 +49 @@
+ wait_for_termination
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:10.937914407 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:10.956914299 +0000
@@ -10,0 +11 @@
+ include Concern::Deprecation
@@ -102,0 +104 @@
+ deprecated "#prune_pool has no effect and will be removed in the next release."
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:10.937914407 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:10.957914294 +0000
@@ -1,0 +2 @@
+require 'concurrent/executor/serial_executor_service'
@@ -8,0 +10 @@
+ include SerialExecutorService
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:10.937914407 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:10.957914294 +0000
@@ -5,0 +6 @@
+require 'concurrent/collection/timeout_queue'
@@ -12,0 +14 @@
+ include Concern::Deprecation
@@ -96,0 +99,4 @@
+ # removes the worker if it can be pruned
+ #
+ # @return [true, false] if the worker was pruned
+ #
@@ -98,2 +104,17 @@
- def remove_busy_worker(worker)
- synchronize { ns_remove_busy_worker worker }
+ def prune_worker(worker)
+ synchronize do
+ if ns_prunable_capacity > 0
+ remove_worker worker
+ true
+ else
+ false
+ end
+ end
+ end
+
+ # @!visibility private
+ def remove_worker(worker)
+ synchronize do
+ ns_remove_ready_worker worker
+ ns_remove_busy_worker worker
+ end
@@ -119 +140 @@
- synchronize { ns_prune_pool }
+ deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
@@ -149,3 +169,0 @@
-
- @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
@@ -164,0 +183 @@
+ nil
@@ -166 +185 @@
- return fallback_action(*args, &task)
+ fallback_action(*args, &task)
@@ -168,3 +186,0 @@
-
- ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
- nil
@@ -221 +237 @@
-
+
@@ -268 +284 @@
- # removes a worker which is not in not tracked in @ready
+ # removes a worker which is not tracked in @ready
@@ -277,2 +292,0 @@
- # try oldest worker if it is idle for enough time, it's returned back at the start
- #
@@ -280,11 +294,3 @@
- def ns_prune_pool
- now = Concurrent.monotonic_time
- stopped_workers = 0
- while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
- worker, last_message = @ready.first
- if now - last_message > self.idletime
- stopped_workers += 1
- @ready.shift
- worker << :stop
- else break
- end
+ def ns_remove_ready_worker(worker)
+ if index = @ready.index { |rw, _| rw == worker }
+ @ready.delete_at(index)
@@ -291,0 +298,2 @@
+ true
+ end
@@ -293 +301,10 @@
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
+ # @return [Integer] number of excess idle workers which can be removed without
+ # going below min_length, or all workers if not running
+ #
+ # @!visibility private
+ def ns_prunable_capacity
+ if running?
+ [@pool.size - @min_length, @ready.size].min
+ else
+ @pool.size
+ end
@@ -295,0 +313 @@
+ # @!visibility private
@@ -315 +333 @@
- @queue = Queue.new
+ @queue = Collection::TimeoutQueue.new
@@ -341 +359 @@
- loop do
+ prunable = true
@@ -343 +361,6 @@
- case message = my_queue.pop
+ loop do
+ timeout = prunable && my_pool.running? ? my_idletime : nil
+ case message = my_queue.pop(timeout: timeout)
+ when nil
+ throw :stop if my_pool.prune_worker(self)
+ prunable = false
@@ -345 +368 @@
- my_pool.remove_busy_worker(self)
+ my_pool.remove_worker(self)
@@ -347 +369,0 @@
-
@@ -351,0 +374 @@
+ prunable = true
lib/concurrent-ruby/concurrent/executor/timer_set.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:10.938914401 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:10.958914288 +0000
@@ -63,0 +64 @@
+ @timer_executor.kill
@@ -125 +126,3 @@
- @timer_executor.kill
+ @condition.set
+ @condition.reset
+ @timer_executor.shutdown
lib/concurrent-ruby/concurrent/executors.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:10.938914401 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:10.958914288 +0000
@@ -13 +12,0 @@
-require 'concurrent/executor/cached_thread_pool'
lib/concurrent-ruby/concurrent/mvar.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:10.939914395 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:10.959914282 +0000
@@ -12 +12 @@
- # `#mutate` that is atomic with respect to operations on the same instance.
+ # `#modify` that is atomic with respect to operations on the same instance.
@@ -90 +90 @@
- # if we timeoud out we'll still be empty
+ # If we timed out we'll still be empty
@@ -119 +119 @@
- # `put` the transformed value. Returns the transformed value. A timeout can
+ # `put` the transformed value. Returns the pre-transform value. A timeout can
@@ -122 +122 @@
- # @return [Object] the transformed value, or `TIMEOUT`
+ # @return [Object] the pre-transform value, or `TIMEOUT`
lib/concurrent-ruby/concurrent/promise.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:10.939914395 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:10.959914282 +0000
@@ -170 +170 @@
- # c1.value #=> 45
+ # c1.value #=> 42
lib/concurrent-ruby/concurrent/timer_task.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:10.943914373 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:10.963914260 +0000
@@ -4,0 +5 @@
+require 'concurrent/atomic/atomic_fixnum'
@@ -238,0 +240 @@
+ @age.increment
@@ -311,0 +314 @@
+ @age = Concurrent::AtomicFixnum.new(0)
@@ -331 +334 @@
- ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
+ ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
@@ -336 +339 @@
- def execute_task(completion)
+ def execute_task(completion, age_when_scheduled)
@@ -337,0 +341,2 @@
+ return nil unless @age.value == age_when_scheduled
+
lib/concurrent-ruby/concurrent/version.rb
--- /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:10.943914373 +0000
+++ /tmp/d20260317-889-qln0a6/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:10.964914254 +0000
@@ -2 +2 @@
- VERSION = '1.3.5'
+ VERSION = '1.3.6' |
Contributor
gem compare concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT date:
1.3.5: 2025-01-15 00:00:00 UTC
1.3.6: 2025-12-13 00:00:00 UTC
DIFFERENT rubygems_version:
1.3.5: 3.3.26
1.3.6: 3.3.27
DIFFERENT version:
1.3.5: 1.3.5
1.3.6: 1.3.6
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
* Changed:
CHANGELOG.md +6/-0
README.md +4/-2
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
lib/concurrent-ruby/concurrent/executors.rb +0/-1
lib/concurrent-ruby/concurrent/mvar.rb +4/-4
lib/concurrent-ruby/concurrent/promise.rb +1/-1
lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
lib/concurrent-ruby/concurrent/version.rb +1/-1
DIFFERENT extra_rdoc_files:
1.3.5->1.3.6:
* Changed:
README.md +4/-2
CHANGELOG.md +6/-0 |
Contributor
gem compare sentry-ruby 5.26.0 6.5.0Compared versions: ["5.26.0", "6.5.0"]
DIFFERENT homepage:
5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
6.5.0: https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby
DIFFERENT metadata:
5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
6.5.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.5.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.5.0"}
DIFFERENT required_ruby_version:
5.26.0: >= 2.4
6.5.0: >= 2.7
DIFFERENT rubygems_version:
5.26.0: 3.6.7
6.5.0: 3.6.9
DIFFERENT version:
5.26.0: 5.26.0
6.5.0: 6.5.0
DIFFERENT files:
5.26.0->6.5.0:
* Deleted:
lib/sentry/metrics/aggregator.rb
lib/sentry/metrics/configuration.rb
lib/sentry/metrics/counter_metric.rb
lib/sentry/metrics/distribution_metric.rb
lib/sentry/metrics/gauge_metric.rb
lib/sentry/metrics/local_aggregator.rb
lib/sentry/metrics/metric.rb
lib/sentry/metrics/set_metric.rb
lib/sentry/metrics/timing.rb
* Added:
lib/sentry/backtrace/line.rb +99/-0
lib/sentry/debug_structured_logger.rb +94/-0
lib/sentry/metric_event.rb +49/-0
lib/sentry/metric_event_buffer.rb +28/-0
lib/sentry/sequel.rb +35/-0
lib/sentry/telemetry_event_buffer.rb +130/-0
lib/sentry/transport/debug_transport.rb +70/-0
lib/sentry/utils/sample_rand.rb +97/-0
lib/sentry/utils/telemetry_attributes.rb +30/-0
* Changed:
Gemfile +27/-5
README.md +3/-3
lib/sentry-ruby.rb +56/-29
lib/sentry/background_worker.rb +1/-4
lib/sentry/backtrace.rb +44/-76
lib/sentry/baggage.rb +2/-2
lib/sentry/breadcrumb.rb +1/-1
lib/sentry/breadcrumb_buffer.rb +2/-2
lib/sentry/check_in_event.rb +2/-2
lib/sentry/client.rb +59/-136
lib/sentry/configuration.rb +206/-78
lib/sentry/cron/monitor_check_ins.rb +3/-3
lib/sentry/cron/monitor_config.rb +2/-2
lib/sentry/cron/monitor_schedule.rb +2/-2
lib/sentry/dsn.rb +65/-1
lib/sentry/envelope/item.rb +3/-3
lib/sentry/error_event.rb +3/-3
lib/sentry/event.rb +4/-10
lib/sentry/exceptions.rb +3/-0
lib/sentry/graphql.rb +1/-1
lib/sentry/hub.rb +29/-5
lib/sentry/interface.rb +1/-1
lib/sentry/interfaces/exception.rb +2/-2
lib/sentry/interfaces/request.rb +2/-0
lib/sentry/interfaces/single_exception.rb +4/-4
lib/sentry/interfaces/stacktrace.rb +3/-3
lib/sentry/interfaces/stacktrace_builder.rb +0/-8
lib/sentry/interfaces/threads.rb +2/-2
lib/sentry/log_event.rb +32/-137
lib/sentry/log_event_buffer.rb +13/-60
lib/sentry/metrics.rb +47/-42
lib/sentry/profiler.rb +4/-5
lib/sentry/propagation_context.rb +101/-24
lib/sentry/rack/capture_exceptions.rb +90/-2
lib/sentry/release_detector.rb +1/-1
lib/sentry/rspec.rb +1/-1
lib/sentry/scope.rb +51/-18
lib/sentry/span.rb +5/-17
lib/sentry/std_lib_logger.rb +10/-1
lib/sentry/test_helper.rb +30/-0
lib/sentry/transaction.rb +73/-95
lib/sentry/transaction_event.rb +4/-9
lib/sentry/transport.rb +10/-7
lib/sentry/transport/dummy_transport.rb +1/-0
lib/sentry/transport/http_transport.rb +16/-16
lib/sentry/utils/encoding_helper.rb +6/-0
lib/sentry/utils/logging_helper.rb +25/-9
lib/sentry/vernier/profiler.rb +4/-3
lib/sentry/version.rb +1/-1
sentry-ruby-core.gemspec +1/-1
sentry-ruby.gemspec +2/-1
DIFFERENT extra_rdoc_files:
5.26.0->6.5.0:
* Changed:
README.md +3/-3
DIFFERENT runtime dependencies:
5.26.0->6.5.0:
* Added:
logger [">= 0"] (runtime)
DIFFERENT Gemfile dependencies
5.26.0->6.5.0:
* Added:
graphql [">= 2.2.6"] (runtime)
sequel [">= 0"] (development)
activerecord-jdbcmysql-adapter [">= 0"] (development)
jdbc-sqlite3 [">= 0"] (development) |
Contributor
gem compare --diff concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
--- /tmp/20260317-949-xz5j4b 2026-03-17 03:33:28.487107634 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb 2026-03-17 03:33:28.477107499 +0000
@@ -0,0 +1,55 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro ruby_timeout_queue
+ class RubyTimeoutQueue < ::Queue
+ def initialize(*args)
+ if RUBY_VERSION >= '3.2'
+ raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
+ end
+
+ super(*args)
+
+ @mutex = Mutex.new
+ @cond_var = ConditionVariable.new
+ end
+
+ def push(obj)
+ @mutex.synchronize do
+ super(obj)
+ @cond_var.signal
+ end
+ end
+ alias_method :enq, :push
+ alias_method :<<, :push
+
+ def pop(non_block = false, timeout: nil)
+ if non_block && timeout
+ raise ArgumentError, "can't set a timeout if non_block is enabled"
+ end
+
+ if non_block
+ super(true)
+ elsif timeout
+ @mutex.synchronize do
+ deadline = Concurrent.monotonic_time + timeout
+ while (now = Concurrent.monotonic_time) < deadline && empty?
+ @cond_var.wait(@mutex, deadline - now)
+ end
+ begin
+ return super(true)
+ rescue ThreadError
+ # still empty
+ nil
+ end
+ end
+ else
+ super(false)
+ end
+ end
+ alias_method :deq, :pop
+ alias_method :shift, :pop
+ end
+ private_constant :RubyTimeoutQueue
+ end
+end
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
--- /tmp/20260317-949-t9mw95 2026-03-17 03:33:28.489107661 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb 2026-03-17 03:33:28.477107499 +0000
@@ -0,0 +1,18 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro internal_implementation_note
+ TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
+ ::Queue
+ else
+ require 'concurrent/collection/ruby_timeout_queue'
+ RubyTimeoutQueue
+ end
+ private_constant :TimeoutQueueImplementation
+
+ # @!visibility private
+ # @!macro timeout_queue
+ class TimeoutQueue < TimeoutQueueImplementation
+ end
+ end
+end
* Changed:
CHANGELOG.md
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/CHANGELOG.md 2026-03-17 03:33:28.450107133 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/CHANGELOG.md 2026-03-17 03:33:28.468107377 +0000
@@ -2,0 +3,6 @@
+## Release v1.3.6 (13 December 2025)
+
+concurrent-ruby:
+
+* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
+
README.md
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/README.md 2026-03-17 03:33:28.450107133 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/README.md 2026-03-17 03:33:28.469107390 +0000
@@ -210 +210 @@
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+keep backward compatibility (they may also lack tests and documentation). Semantic versions will
@@ -361 +361,2 @@
-* Install Docker, required for Windows builds
+* Install Docker or Podman, required for Windows builds
+* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
@@ -380,0 +382 @@
+* [Joshua Young](https://github.com/joshuay03)
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:28.456107214 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:28.474107458 +0000
@@ -8,0 +9 @@
+ return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
lib/concurrent-ruby/concurrent/concurrent_ruby.jar
Binary files /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:28.461107282 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:28.480107539 +0000
@@ -84,4 +84,2 @@
- # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
- # pool will auto-prune each time a new job is posted. You will need to call
- # this method explicitly in case your application post jobs in bursts (a
- # lot of jobs and then nothing for long periods)
+ # This is a no-op on all pool implementations as they prune themselves
+ # automatically, and has been deprecated.
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:28.462107296 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:28.480107539 +0000
@@ -48,0 +49 @@
+ wait_for_termination
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:28.462107296 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:28.480107539 +0000
@@ -10,0 +11 @@
+ include Concern::Deprecation
@@ -102,0 +104 @@
+ deprecated "#prune_pool has no effect and will be removed in the next release."
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:28.462107296 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:28.480107539 +0000
@@ -1,0 +2 @@
+require 'concurrent/executor/serial_executor_service'
@@ -8,0 +10 @@
+ include SerialExecutorService
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:28.462107296 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:28.480107539 +0000
@@ -5,0 +6 @@
+require 'concurrent/collection/timeout_queue'
@@ -12,0 +14 @@
+ include Concern::Deprecation
@@ -96,0 +99,4 @@
+ # removes the worker if it can be pruned
+ #
+ # @return [true, false] if the worker was pruned
+ #
@@ -98,2 +104,17 @@
- def remove_busy_worker(worker)
- synchronize { ns_remove_busy_worker worker }
+ def prune_worker(worker)
+ synchronize do
+ if ns_prunable_capacity > 0
+ remove_worker worker
+ true
+ else
+ false
+ end
+ end
+ end
+
+ # @!visibility private
+ def remove_worker(worker)
+ synchronize do
+ ns_remove_ready_worker worker
+ ns_remove_busy_worker worker
+ end
@@ -119 +140 @@
- synchronize { ns_prune_pool }
+ deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
@@ -149,3 +169,0 @@
-
- @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
@@ -164,0 +183 @@
+ nil
@@ -166 +185 @@
- return fallback_action(*args, &task)
+ fallback_action(*args, &task)
@@ -168,3 +186,0 @@
-
- ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
- nil
@@ -221 +237 @@
-
+
@@ -268 +284 @@
- # removes a worker which is not in not tracked in @ready
+ # removes a worker which is not tracked in @ready
@@ -277,2 +292,0 @@
- # try oldest worker if it is idle for enough time, it's returned back at the start
- #
@@ -280,11 +294,3 @@
- def ns_prune_pool
- now = Concurrent.monotonic_time
- stopped_workers = 0
- while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
- worker, last_message = @ready.first
- if now - last_message > self.idletime
- stopped_workers += 1
- @ready.shift
- worker << :stop
- else break
- end
+ def ns_remove_ready_worker(worker)
+ if index = @ready.index { |rw, _| rw == worker }
+ @ready.delete_at(index)
@@ -291,0 +298,2 @@
+ true
+ end
@@ -293 +301,10 @@
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
+ # @return [Integer] number of excess idle workers which can be removed without
+ # going below min_length, or all workers if not running
+ #
+ # @!visibility private
+ def ns_prunable_capacity
+ if running?
+ [@pool.size - @min_length, @ready.size].min
+ else
+ @pool.size
+ end
@@ -295,0 +313 @@
+ # @!visibility private
@@ -315 +333 @@
- @queue = Queue.new
+ @queue = Collection::TimeoutQueue.new
@@ -341 +359 @@
- loop do
+ prunable = true
@@ -343 +361,6 @@
- case message = my_queue.pop
+ loop do
+ timeout = prunable && my_pool.running? ? my_idletime : nil
+ case message = my_queue.pop(timeout: timeout)
+ when nil
+ throw :stop if my_pool.prune_worker(self)
+ prunable = false
@@ -345 +368 @@
- my_pool.remove_busy_worker(self)
+ my_pool.remove_worker(self)
@@ -347 +369,0 @@
-
@@ -351,0 +374 @@
+ prunable = true
lib/concurrent-ruby/concurrent/executor/timer_set.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:28.463107309 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:28.481107553 +0000
@@ -63,0 +64 @@
+ @timer_executor.kill
@@ -125 +126,3 @@
- @timer_executor.kill
+ @condition.set
+ @condition.reset
+ @timer_executor.shutdown
lib/concurrent-ruby/concurrent/executors.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:28.463107309 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:28.481107553 +0000
@@ -13 +12,0 @@
-require 'concurrent/executor/cached_thread_pool'
lib/concurrent-ruby/concurrent/mvar.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:28.464107323 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:28.482107566 +0000
@@ -12 +12 @@
- # `#mutate` that is atomic with respect to operations on the same instance.
+ # `#modify` that is atomic with respect to operations on the same instance.
@@ -90 +90 @@
- # if we timeoud out we'll still be empty
+ # If we timed out we'll still be empty
@@ -119 +119 @@
- # `put` the transformed value. Returns the transformed value. A timeout can
+ # `put` the transformed value. Returns the pre-transform value. A timeout can
@@ -122 +122 @@
- # @return [Object] the transformed value, or `TIMEOUT`
+ # @return [Object] the pre-transform value, or `TIMEOUT`
lib/concurrent-ruby/concurrent/promise.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:28.464107323 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:28.482107566 +0000
@@ -170 +170 @@
- # c1.value #=> 45
+ # c1.value #=> 42
lib/concurrent-ruby/concurrent/timer_task.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:28.467107363 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:28.485107607 +0000
@@ -4,0 +5 @@
+require 'concurrent/atomic/atomic_fixnum'
@@ -238,0 +240 @@
+ @age.increment
@@ -311,0 +314 @@
+ @age = Concurrent::AtomicFixnum.new(0)
@@ -331 +334 @@
- ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
+ ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
@@ -336 +339 @@
- def execute_task(completion)
+ def execute_task(completion, age_when_scheduled)
@@ -337,0 +341,2 @@
+ return nil unless @age.value == age_when_scheduled
+
lib/concurrent-ruby/concurrent/version.rb
--- /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:28.468107377 +0000
+++ /tmp/d20260317-949-st9hvd/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:28.486107620 +0000
@@ -2 +2 @@
- VERSION = '1.3.5'
+ VERSION = '1.3.6' |
Contributor
gem compare --diff concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
--- /tmp/20260317-884-7gis2p 2026-03-17 03:33:35.707202686 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb 2026-03-17 03:33:35.697202692 +0000
@@ -0,0 +1,55 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro ruby_timeout_queue
+ class RubyTimeoutQueue < ::Queue
+ def initialize(*args)
+ if RUBY_VERSION >= '3.2'
+ raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
+ end
+
+ super(*args)
+
+ @mutex = Mutex.new
+ @cond_var = ConditionVariable.new
+ end
+
+ def push(obj)
+ @mutex.synchronize do
+ super(obj)
+ @cond_var.signal
+ end
+ end
+ alias_method :enq, :push
+ alias_method :<<, :push
+
+ def pop(non_block = false, timeout: nil)
+ if non_block && timeout
+ raise ArgumentError, "can't set a timeout if non_block is enabled"
+ end
+
+ if non_block
+ super(true)
+ elsif timeout
+ @mutex.synchronize do
+ deadline = Concurrent.monotonic_time + timeout
+ while (now = Concurrent.monotonic_time) < deadline && empty?
+ @cond_var.wait(@mutex, deadline - now)
+ end
+ begin
+ return super(true)
+ rescue ThreadError
+ # still empty
+ nil
+ end
+ end
+ else
+ super(false)
+ end
+ end
+ alias_method :deq, :pop
+ alias_method :shift, :pop
+ end
+ private_constant :RubyTimeoutQueue
+ end
+end
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
--- /tmp/20260317-884-a2lk2h 2026-03-17 03:33:35.710202684 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb 2026-03-17 03:33:35.697202692 +0000
@@ -0,0 +1,18 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro internal_implementation_note
+ TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
+ ::Queue
+ else
+ require 'concurrent/collection/ruby_timeout_queue'
+ RubyTimeoutQueue
+ end
+ private_constant :TimeoutQueueImplementation
+
+ # @!visibility private
+ # @!macro timeout_queue
+ class TimeoutQueue < TimeoutQueueImplementation
+ end
+ end
+end
* Changed:
CHANGELOG.md
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/CHANGELOG.md 2026-03-17 03:33:35.666202710 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/CHANGELOG.md 2026-03-17 03:33:35.686202699 +0000
@@ -2,0 +3,6 @@
+## Release v1.3.6 (13 December 2025)
+
+concurrent-ruby:
+
+* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
+
README.md
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/README.md 2026-03-17 03:33:35.666202710 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/README.md 2026-03-17 03:33:35.687202698 +0000
@@ -210 +210 @@
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+keep backward compatibility (they may also lack tests and documentation). Semantic versions will
@@ -361 +361,2 @@
-* Install Docker, required for Windows builds
+* Install Docker or Podman, required for Windows builds
+* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
@@ -380,0 +382 @@
+* [Joshua Young](https://github.com/joshuay03)
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:35.674202706 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:33:35.694202694 +0000
@@ -8,0 +9 @@
+ return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
lib/concurrent-ruby/concurrent/concurrent_ruby.jar
Binary files /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:35.679202703 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:33:35.700202690 +0000
@@ -84,4 +84,2 @@
- # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
- # pool will auto-prune each time a new job is posted. You will need to call
- # this method explicitly in case your application post jobs in bursts (a
- # lot of jobs and then nothing for long periods)
+ # This is a no-op on all pool implementations as they prune themselves
+ # automatically, and has been deprecated.
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:35.679202703 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:33:35.700202690 +0000
@@ -48,0 +49 @@
+ wait_for_termination
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:35.679202703 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:33:35.700202690 +0000
@@ -10,0 +11 @@
+ include Concern::Deprecation
@@ -102,0 +104 @@
+ deprecated "#prune_pool has no effect and will be removed in the next release."
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:35.679202703 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:33:35.700202690 +0000
@@ -1,0 +2 @@
+require 'concurrent/executor/serial_executor_service'
@@ -8,0 +10 @@
+ include SerialExecutorService
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:35.679202703 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:33:35.701202690 +0000
@@ -5,0 +6 @@
+require 'concurrent/collection/timeout_queue'
@@ -12,0 +14 @@
+ include Concern::Deprecation
@@ -96,0 +99,4 @@
+ # removes the worker if it can be pruned
+ #
+ # @return [true, false] if the worker was pruned
+ #
@@ -98,2 +104,17 @@
- def remove_busy_worker(worker)
- synchronize { ns_remove_busy_worker worker }
+ def prune_worker(worker)
+ synchronize do
+ if ns_prunable_capacity > 0
+ remove_worker worker
+ true
+ else
+ false
+ end
+ end
+ end
+
+ # @!visibility private
+ def remove_worker(worker)
+ synchronize do
+ ns_remove_ready_worker worker
+ ns_remove_busy_worker worker
+ end
@@ -119 +140 @@
- synchronize { ns_prune_pool }
+ deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
@@ -149,3 +169,0 @@
-
- @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
@@ -164,0 +183 @@
+ nil
@@ -166 +185 @@
- return fallback_action(*args, &task)
+ fallback_action(*args, &task)
@@ -168,3 +186,0 @@
-
- ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
- nil
@@ -221 +237 @@
-
+
@@ -268 +284 @@
- # removes a worker which is not in not tracked in @ready
+ # removes a worker which is not tracked in @ready
@@ -277,2 +292,0 @@
- # try oldest worker if it is idle for enough time, it's returned back at the start
- #
@@ -280,11 +294,3 @@
- def ns_prune_pool
- now = Concurrent.monotonic_time
- stopped_workers = 0
- while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
- worker, last_message = @ready.first
- if now - last_message > self.idletime
- stopped_workers += 1
- @ready.shift
- worker << :stop
- else break
- end
+ def ns_remove_ready_worker(worker)
+ if index = @ready.index { |rw, _| rw == worker }
+ @ready.delete_at(index)
@@ -291,0 +298,2 @@
+ true
+ end
@@ -293 +301,10 @@
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
+ # @return [Integer] number of excess idle workers which can be removed without
+ # going below min_length, or all workers if not running
+ #
+ # @!visibility private
+ def ns_prunable_capacity
+ if running?
+ [@pool.size - @min_length, @ready.size].min
+ else
+ @pool.size
+ end
@@ -295,0 +313 @@
+ # @!visibility private
@@ -315 +333 @@
- @queue = Queue.new
+ @queue = Collection::TimeoutQueue.new
@@ -341 +359 @@
- loop do
+ prunable = true
@@ -343 +361,6 @@
- case message = my_queue.pop
+ loop do
+ timeout = prunable && my_pool.running? ? my_idletime : nil
+ case message = my_queue.pop(timeout: timeout)
+ when nil
+ throw :stop if my_pool.prune_worker(self)
+ prunable = false
@@ -345 +368 @@
- my_pool.remove_busy_worker(self)
+ my_pool.remove_worker(self)
@@ -347 +369,0 @@
-
@@ -351,0 +374 @@
+ prunable = true
lib/concurrent-ruby/concurrent/executor/timer_set.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:35.680202702 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:33:35.701202690 +0000
@@ -63,0 +64 @@
+ @timer_executor.kill
@@ -125 +126,3 @@
- @timer_executor.kill
+ @condition.set
+ @condition.reset
+ @timer_executor.shutdown
lib/concurrent-ruby/concurrent/executors.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:35.681202702 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:33:35.701202690 +0000
@@ -13 +12,0 @@
-require 'concurrent/executor/cached_thread_pool'
lib/concurrent-ruby/concurrent/mvar.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:35.682202701 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:33:35.702202689 +0000
@@ -12 +12 @@
- # `#mutate` that is atomic with respect to operations on the same instance.
+ # `#modify` that is atomic with respect to operations on the same instance.
@@ -90 +90 @@
- # if we timeoud out we'll still be empty
+ # If we timed out we'll still be empty
@@ -119 +119 @@
- # `put` the transformed value. Returns the transformed value. A timeout can
+ # `put` the transformed value. Returns the pre-transform value. A timeout can
@@ -122 +122 @@
- # @return [Object] the transformed value, or `TIMEOUT`
+ # @return [Object] the pre-transform value, or `TIMEOUT`
lib/concurrent-ruby/concurrent/promise.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:35.682202701 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:33:35.703202689 +0000
@@ -170 +170 @@
- # c1.value #=> 45
+ # c1.value #=> 42
lib/concurrent-ruby/concurrent/timer_task.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:35.685202699 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:33:35.706202687 +0000
@@ -4,0 +5 @@
+require 'concurrent/atomic/atomic_fixnum'
@@ -238,0 +240 @@
+ @age.increment
@@ -311,0 +314 @@
+ @age = Concurrent::AtomicFixnum.new(0)
@@ -331 +334 @@
- ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
+ ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
@@ -336 +339 @@
- def execute_task(completion)
+ def execute_task(completion, age_when_scheduled)
@@ -337,0 +341,2 @@
+ return nil unless @age.value == age_when_scheduled
+
lib/concurrent-ruby/concurrent/version.rb
--- /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:35.686202699 +0000
+++ /tmp/d20260317-884-ycel4g/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:33:35.707202686 +0000
@@ -2 +2 @@
- VERSION = '1.3.5'
+ VERSION = '1.3.6' |
Contributor
|
Contributor
gem compare sentry-ruby 5.26.0 6.5.0Compared versions: ["5.26.0", "6.5.0"]
DIFFERENT homepage:
5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
6.5.0: https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby
DIFFERENT metadata:
5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
6.5.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.5.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.5.0"}
DIFFERENT required_ruby_version:
5.26.0: >= 2.4
6.5.0: >= 2.7
DIFFERENT rubygems_version:
5.26.0: 3.6.7
6.5.0: 3.6.9
DIFFERENT version:
5.26.0: 5.26.0
6.5.0: 6.5.0
DIFFERENT files:
5.26.0->6.5.0:
* Deleted:
lib/sentry/metrics/aggregator.rb
lib/sentry/metrics/configuration.rb
lib/sentry/metrics/counter_metric.rb
lib/sentry/metrics/distribution_metric.rb
lib/sentry/metrics/gauge_metric.rb
lib/sentry/metrics/local_aggregator.rb
lib/sentry/metrics/metric.rb
lib/sentry/metrics/set_metric.rb
lib/sentry/metrics/timing.rb
* Added:
lib/sentry/backtrace/line.rb +99/-0
lib/sentry/debug_structured_logger.rb +94/-0
lib/sentry/metric_event.rb +49/-0
lib/sentry/metric_event_buffer.rb +28/-0
lib/sentry/sequel.rb +35/-0
lib/sentry/telemetry_event_buffer.rb +130/-0
lib/sentry/transport/debug_transport.rb +70/-0
lib/sentry/utils/sample_rand.rb +97/-0
lib/sentry/utils/telemetry_attributes.rb +30/-0
* Changed:
Gemfile +27/-5
README.md +3/-3
lib/sentry-ruby.rb +56/-29
lib/sentry/background_worker.rb +1/-4
lib/sentry/backtrace.rb +44/-76
lib/sentry/baggage.rb +2/-2
lib/sentry/breadcrumb.rb +1/-1
lib/sentry/breadcrumb_buffer.rb +2/-2
lib/sentry/check_in_event.rb +2/-2
lib/sentry/client.rb +59/-136
lib/sentry/configuration.rb +206/-78
lib/sentry/cron/monitor_check_ins.rb +3/-3
lib/sentry/cron/monitor_config.rb +2/-2
lib/sentry/cron/monitor_schedule.rb +2/-2
lib/sentry/dsn.rb +65/-1
lib/sentry/envelope/item.rb +3/-3
lib/sentry/error_event.rb +3/-3
lib/sentry/event.rb +4/-10
lib/sentry/exceptions.rb +3/-0
lib/sentry/graphql.rb +1/-1
lib/sentry/hub.rb +29/-5
lib/sentry/interface.rb +1/-1
lib/sentry/interfaces/exception.rb +2/-2
lib/sentry/interfaces/request.rb +2/-0
lib/sentry/interfaces/single_exception.rb +4/-4
lib/sentry/interfaces/stacktrace.rb +3/-3
lib/sentry/interfaces/stacktrace_builder.rb +0/-8
lib/sentry/interfaces/threads.rb +2/-2
lib/sentry/log_event.rb +32/-137
lib/sentry/log_event_buffer.rb +13/-60
lib/sentry/metrics.rb +47/-42
lib/sentry/profiler.rb +4/-5
lib/sentry/propagation_context.rb +101/-24
lib/sentry/rack/capture_exceptions.rb +90/-2
lib/sentry/release_detector.rb +1/-1
lib/sentry/rspec.rb +1/-1
lib/sentry/scope.rb +51/-18
lib/sentry/span.rb +5/-17
lib/sentry/std_lib_logger.rb +10/-1
lib/sentry/test_helper.rb +30/-0
lib/sentry/transaction.rb +73/-95
lib/sentry/transaction_event.rb +4/-9
lib/sentry/transport.rb +10/-7
lib/sentry/transport/dummy_transport.rb +1/-0
lib/sentry/transport/http_transport.rb +16/-16
lib/sentry/utils/encoding_helper.rb +6/-0
lib/sentry/utils/logging_helper.rb +25/-9
lib/sentry/vernier/profiler.rb +4/-3
lib/sentry/version.rb +1/-1
sentry-ruby-core.gemspec +1/-1
sentry-ruby.gemspec +2/-1
DIFFERENT extra_rdoc_files:
5.26.0->6.5.0:
* Changed:
README.md +3/-3
DIFFERENT runtime dependencies:
5.26.0->6.5.0:
* Added:
logger [">= 0"] (runtime)
DIFFERENT Gemfile dependencies
5.26.0->6.5.0:
* Added:
graphql [">= 2.2.6"] (runtime)
sequel [">= 0"] (development)
activerecord-jdbcmysql-adapter [">= 0"] (development)
jdbc-sqlite3 [">= 0"] (development) |
1 similar comment
Contributor
gem compare sentry-ruby 5.26.0 6.5.0Compared versions: ["5.26.0", "6.5.0"]
DIFFERENT homepage:
5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
6.5.0: https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby
DIFFERENT metadata:
5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
6.5.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.5.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.5.0"}
DIFFERENT required_ruby_version:
5.26.0: >= 2.4
6.5.0: >= 2.7
DIFFERENT rubygems_version:
5.26.0: 3.6.7
6.5.0: 3.6.9
DIFFERENT version:
5.26.0: 5.26.0
6.5.0: 6.5.0
DIFFERENT files:
5.26.0->6.5.0:
* Deleted:
lib/sentry/metrics/aggregator.rb
lib/sentry/metrics/configuration.rb
lib/sentry/metrics/counter_metric.rb
lib/sentry/metrics/distribution_metric.rb
lib/sentry/metrics/gauge_metric.rb
lib/sentry/metrics/local_aggregator.rb
lib/sentry/metrics/metric.rb
lib/sentry/metrics/set_metric.rb
lib/sentry/metrics/timing.rb
* Added:
lib/sentry/backtrace/line.rb +99/-0
lib/sentry/debug_structured_logger.rb +94/-0
lib/sentry/metric_event.rb +49/-0
lib/sentry/metric_event_buffer.rb +28/-0
lib/sentry/sequel.rb +35/-0
lib/sentry/telemetry_event_buffer.rb +130/-0
lib/sentry/transport/debug_transport.rb +70/-0
lib/sentry/utils/sample_rand.rb +97/-0
lib/sentry/utils/telemetry_attributes.rb +30/-0
* Changed:
Gemfile +27/-5
README.md +3/-3
lib/sentry-ruby.rb +56/-29
lib/sentry/background_worker.rb +1/-4
lib/sentry/backtrace.rb +44/-76
lib/sentry/baggage.rb +2/-2
lib/sentry/breadcrumb.rb +1/-1
lib/sentry/breadcrumb_buffer.rb +2/-2
lib/sentry/check_in_event.rb +2/-2
lib/sentry/client.rb +59/-136
lib/sentry/configuration.rb +206/-78
lib/sentry/cron/monitor_check_ins.rb +3/-3
lib/sentry/cron/monitor_config.rb +2/-2
lib/sentry/cron/monitor_schedule.rb +2/-2
lib/sentry/dsn.rb +65/-1
lib/sentry/envelope/item.rb +3/-3
lib/sentry/error_event.rb +3/-3
lib/sentry/event.rb +4/-10
lib/sentry/exceptions.rb +3/-0
lib/sentry/graphql.rb +1/-1
lib/sentry/hub.rb +29/-5
lib/sentry/interface.rb +1/-1
lib/sentry/interfaces/exception.rb +2/-2
lib/sentry/interfaces/request.rb +2/-0
lib/sentry/interfaces/single_exception.rb +4/-4
lib/sentry/interfaces/stacktrace.rb +3/-3
lib/sentry/interfaces/stacktrace_builder.rb +0/-8
lib/sentry/interfaces/threads.rb +2/-2
lib/sentry/log_event.rb +32/-137
lib/sentry/log_event_buffer.rb +13/-60
lib/sentry/metrics.rb +47/-42
lib/sentry/profiler.rb +4/-5
lib/sentry/propagation_context.rb +101/-24
lib/sentry/rack/capture_exceptions.rb +90/-2
lib/sentry/release_detector.rb +1/-1
lib/sentry/rspec.rb +1/-1
lib/sentry/scope.rb +51/-18
lib/sentry/span.rb +5/-17
lib/sentry/std_lib_logger.rb +10/-1
lib/sentry/test_helper.rb +30/-0
lib/sentry/transaction.rb +73/-95
lib/sentry/transaction_event.rb +4/-9
lib/sentry/transport.rb +10/-7
lib/sentry/transport/dummy_transport.rb +1/-0
lib/sentry/transport/http_transport.rb +16/-16
lib/sentry/utils/encoding_helper.rb +6/-0
lib/sentry/utils/logging_helper.rb +25/-9
lib/sentry/vernier/profiler.rb +4/-3
lib/sentry/version.rb +1/-1
sentry-ruby-core.gemspec +1/-1
sentry-ruby.gemspec +2/-1
DIFFERENT extra_rdoc_files:
5.26.0->6.5.0:
* Changed:
README.md +3/-3
DIFFERENT runtime dependencies:
5.26.0->6.5.0:
* Added:
logger [">= 0"] (runtime)
DIFFERENT Gemfile dependencies
5.26.0->6.5.0:
* Added:
graphql [">= 2.2.6"] (runtime)
sequel [">= 0"] (development)
activerecord-jdbcmysql-adapter [">= 0"] (development)
jdbc-sqlite3 [">= 0"] (development) |
Contributor
|
Contributor
gem compare concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT date:
1.3.5: 2025-01-15 00:00:00 UTC
1.3.6: 2025-12-13 00:00:00 UTC
DIFFERENT rubygems_version:
1.3.5: 3.3.26
1.3.6: 3.3.27
DIFFERENT version:
1.3.5: 1.3.5
1.3.6: 1.3.6
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
* Changed:
CHANGELOG.md +6/-0
README.md +4/-2
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
lib/concurrent-ruby/concurrent/executors.rb +0/-1
lib/concurrent-ruby/concurrent/mvar.rb +4/-4
lib/concurrent-ruby/concurrent/promise.rb +1/-1
lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
lib/concurrent-ruby/concurrent/version.rb +1/-1
DIFFERENT extra_rdoc_files:
1.3.5->1.3.6:
* Changed:
README.md +4/-2
CHANGELOG.md +6/-0 |
Contributor
gem compare --diff concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
--- /tmp/20260317-948-kqqi7z 2026-03-17 03:34:15.378483971 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb 2026-03-17 03:34:15.367484061 +0000
@@ -0,0 +1,55 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro ruby_timeout_queue
+ class RubyTimeoutQueue < ::Queue
+ def initialize(*args)
+ if RUBY_VERSION >= '3.2'
+ raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
+ end
+
+ super(*args)
+
+ @mutex = Mutex.new
+ @cond_var = ConditionVariable.new
+ end
+
+ def push(obj)
+ @mutex.synchronize do
+ super(obj)
+ @cond_var.signal
+ end
+ end
+ alias_method :enq, :push
+ alias_method :<<, :push
+
+ def pop(non_block = false, timeout: nil)
+ if non_block && timeout
+ raise ArgumentError, "can't set a timeout if non_block is enabled"
+ end
+
+ if non_block
+ super(true)
+ elsif timeout
+ @mutex.synchronize do
+ deadline = Concurrent.monotonic_time + timeout
+ while (now = Concurrent.monotonic_time) < deadline && empty?
+ @cond_var.wait(@mutex, deadline - now)
+ end
+ begin
+ return super(true)
+ rescue ThreadError
+ # still empty
+ nil
+ end
+ end
+ else
+ super(false)
+ end
+ end
+ alias_method :deq, :pop
+ alias_method :shift, :pop
+ end
+ private_constant :RubyTimeoutQueue
+ end
+end
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
--- /tmp/20260317-948-jiygib 2026-03-17 03:34:15.380483954 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb 2026-03-17 03:34:15.367484061 +0000
@@ -0,0 +1,18 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro internal_implementation_note
+ TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
+ ::Queue
+ else
+ require 'concurrent/collection/ruby_timeout_queue'
+ RubyTimeoutQueue
+ end
+ private_constant :TimeoutQueueImplementation
+
+ # @!visibility private
+ # @!macro timeout_queue
+ class TimeoutQueue < TimeoutQueueImplementation
+ end
+ end
+end
* Changed:
CHANGELOG.md
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/CHANGELOG.md 2026-03-17 03:34:15.337484307 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/CHANGELOG.md 2026-03-17 03:34:15.357484143 +0000
@@ -2,0 +3,6 @@
+## Release v1.3.6 (13 December 2025)
+
+concurrent-ruby:
+
+* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
+
README.md
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/README.md 2026-03-17 03:34:15.337484307 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/README.md 2026-03-17 03:34:15.358484135 +0000
@@ -210 +210 @@
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+keep backward compatibility (they may also lack tests and documentation). Semantic versions will
@@ -361 +361,2 @@
-* Install Docker, required for Windows builds
+* Install Docker or Podman, required for Windows builds
+* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
@@ -380,0 +382 @@
+* [Joshua Young](https://github.com/joshuay03)
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:34:15.345484241 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:34:15.364484086 +0000
@@ -8,0 +9 @@
+ return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
lib/concurrent-ruby/concurrent/concurrent_ruby.jar
Binary files /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:34:15.350484200 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:34:15.370484036 +0000
@@ -84,4 +84,2 @@
- # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
- # pool will auto-prune each time a new job is posted. You will need to call
- # this method explicitly in case your application post jobs in bursts (a
- # lot of jobs and then nothing for long periods)
+ # This is a no-op on all pool implementations as they prune themselves
+ # automatically, and has been deprecated.
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:34:15.350484200 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:34:15.370484036 +0000
@@ -48,0 +49 @@
+ wait_for_termination
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:34:15.350484200 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:34:15.370484036 +0000
@@ -10,0 +11 @@
+ include Concern::Deprecation
@@ -102,0 +104 @@
+ deprecated "#prune_pool has no effect and will be removed in the next release."
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:34:15.350484200 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:34:15.370484036 +0000
@@ -1,0 +2 @@
+require 'concurrent/executor/serial_executor_service'
@@ -8,0 +10 @@
+ include SerialExecutorService
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:34:15.351484192 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:34:15.370484036 +0000
@@ -5,0 +6 @@
+require 'concurrent/collection/timeout_queue'
@@ -12,0 +14 @@
+ include Concern::Deprecation
@@ -96,0 +99,4 @@
+ # removes the worker if it can be pruned
+ #
+ # @return [true, false] if the worker was pruned
+ #
@@ -98,2 +104,17 @@
- def remove_busy_worker(worker)
- synchronize { ns_remove_busy_worker worker }
+ def prune_worker(worker)
+ synchronize do
+ if ns_prunable_capacity > 0
+ remove_worker worker
+ true
+ else
+ false
+ end
+ end
+ end
+
+ # @!visibility private
+ def remove_worker(worker)
+ synchronize do
+ ns_remove_ready_worker worker
+ ns_remove_busy_worker worker
+ end
@@ -119 +140 @@
- synchronize { ns_prune_pool }
+ deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
@@ -149,3 +169,0 @@
-
- @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
@@ -164,0 +183 @@
+ nil
@@ -166 +185 @@
- return fallback_action(*args, &task)
+ fallback_action(*args, &task)
@@ -168,3 +186,0 @@
-
- ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
- nil
@@ -221 +237 @@
-
+
@@ -268 +284 @@
- # removes a worker which is not in not tracked in @ready
+ # removes a worker which is not tracked in @ready
@@ -277,2 +292,0 @@
- # try oldest worker if it is idle for enough time, it's returned back at the start
- #
@@ -280,11 +294,3 @@
- def ns_prune_pool
- now = Concurrent.monotonic_time
- stopped_workers = 0
- while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
- worker, last_message = @ready.first
- if now - last_message > self.idletime
- stopped_workers += 1
- @ready.shift
- worker << :stop
- else break
- end
+ def ns_remove_ready_worker(worker)
+ if index = @ready.index { |rw, _| rw == worker }
+ @ready.delete_at(index)
@@ -291,0 +298,2 @@
+ true
+ end
@@ -293 +301,10 @@
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
+ # @return [Integer] number of excess idle workers which can be removed without
+ # going below min_length, or all workers if not running
+ #
+ # @!visibility private
+ def ns_prunable_capacity
+ if running?
+ [@pool.size - @min_length, @ready.size].min
+ else
+ @pool.size
+ end
@@ -295,0 +313 @@
+ # @!visibility private
@@ -315 +333 @@
- @queue = Queue.new
+ @queue = Collection::TimeoutQueue.new
@@ -341 +359 @@
- loop do
+ prunable = true
@@ -343 +361,6 @@
- case message = my_queue.pop
+ loop do
+ timeout = prunable && my_pool.running? ? my_idletime : nil
+ case message = my_queue.pop(timeout: timeout)
+ when nil
+ throw :stop if my_pool.prune_worker(self)
+ prunable = false
@@ -345 +368 @@
- my_pool.remove_busy_worker(self)
+ my_pool.remove_worker(self)
@@ -347 +369,0 @@
-
@@ -351,0 +374 @@
+ prunable = true
lib/concurrent-ruby/concurrent/executor/timer_set.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:34:15.351484192 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:34:15.371484028 +0000
@@ -63,0 +64 @@
+ @timer_executor.kill
@@ -125 +126,3 @@
- @timer_executor.kill
+ @condition.set
+ @condition.reset
+ @timer_executor.shutdown
lib/concurrent-ruby/concurrent/executors.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:34:15.351484192 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:34:15.371484028 +0000
@@ -13 +12,0 @@
-require 'concurrent/executor/cached_thread_pool'
lib/concurrent-ruby/concurrent/mvar.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:34:15.352484184 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:34:15.372484020 +0000
@@ -12 +12 @@
- # `#mutate` that is atomic with respect to operations on the same instance.
+ # `#modify` that is atomic with respect to operations on the same instance.
@@ -90 +90 @@
- # if we timeoud out we'll still be empty
+ # If we timed out we'll still be empty
@@ -119 +119 @@
- # `put` the transformed value. Returns the transformed value. A timeout can
+ # `put` the transformed value. Returns the pre-transform value. A timeout can
@@ -122 +122 @@
- # @return [Object] the transformed value, or `TIMEOUT`
+ # @return [Object] the pre-transform value, or `TIMEOUT`
lib/concurrent-ruby/concurrent/promise.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:34:15.353484176 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:34:15.372484020 +0000
@@ -170 +170 @@
- # c1.value #=> 45
+ # c1.value #=> 42
lib/concurrent-ruby/concurrent/timer_task.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:34:15.356484151 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:34:15.376483987 +0000
@@ -4,0 +5 @@
+require 'concurrent/atomic/atomic_fixnum'
@@ -238,0 +240 @@
+ @age.increment
@@ -311,0 +314 @@
+ @age = Concurrent::AtomicFixnum.new(0)
@@ -331 +334 @@
- ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
+ ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
@@ -336 +339 @@
- def execute_task(completion)
+ def execute_task(completion, age_when_scheduled)
@@ -337,0 +341,2 @@
+ return nil unless @age.value == age_when_scheduled
+
lib/concurrent-ruby/concurrent/version.rb
--- /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:34:15.357484143 +0000
+++ /tmp/d20260317-948-yj8goz/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:34:15.377483979 +0000
@@ -2 +2 @@
- VERSION = '1.3.5'
+ VERSION = '1.3.6' |
Contributor
gem compare concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT date:
1.3.5: 2025-01-15 00:00:00 UTC
1.3.6: 2025-12-13 00:00:00 UTC
DIFFERENT rubygems_version:
1.3.5: 3.3.26
1.3.6: 3.3.27
DIFFERENT version:
1.3.5: 1.3.5
1.3.6: 1.3.6
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
* Changed:
CHANGELOG.md +6/-0
README.md +4/-2
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
lib/concurrent-ruby/concurrent/executors.rb +0/-1
lib/concurrent-ruby/concurrent/mvar.rb +4/-4
lib/concurrent-ruby/concurrent/promise.rb +1/-1
lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
lib/concurrent-ruby/concurrent/version.rb +1/-1
DIFFERENT extra_rdoc_files:
1.3.5->1.3.6:
* Changed:
README.md +4/-2
CHANGELOG.md +6/-0 |
Contributor
gem compare sentry-ruby 5.26.0 6.5.0Compared versions: ["5.26.0", "6.5.0"]
DIFFERENT homepage:
5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
6.5.0: https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby
DIFFERENT metadata:
5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
6.5.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.5.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.5.0"}
DIFFERENT required_ruby_version:
5.26.0: >= 2.4
6.5.0: >= 2.7
DIFFERENT rubygems_version:
5.26.0: 3.6.7
6.5.0: 3.6.9
DIFFERENT version:
5.26.0: 5.26.0
6.5.0: 6.5.0
DIFFERENT files:
5.26.0->6.5.0:
* Deleted:
lib/sentry/metrics/aggregator.rb
lib/sentry/metrics/configuration.rb
lib/sentry/metrics/counter_metric.rb
lib/sentry/metrics/distribution_metric.rb
lib/sentry/metrics/gauge_metric.rb
lib/sentry/metrics/local_aggregator.rb
lib/sentry/metrics/metric.rb
lib/sentry/metrics/set_metric.rb
lib/sentry/metrics/timing.rb
* Added:
lib/sentry/backtrace/line.rb +99/-0
lib/sentry/debug_structured_logger.rb +94/-0
lib/sentry/metric_event.rb +49/-0
lib/sentry/metric_event_buffer.rb +28/-0
lib/sentry/sequel.rb +35/-0
lib/sentry/telemetry_event_buffer.rb +130/-0
lib/sentry/transport/debug_transport.rb +70/-0
lib/sentry/utils/sample_rand.rb +97/-0
lib/sentry/utils/telemetry_attributes.rb +30/-0
* Changed:
Gemfile +27/-5
README.md +3/-3
lib/sentry-ruby.rb +56/-29
lib/sentry/background_worker.rb +1/-4
lib/sentry/backtrace.rb +44/-76
lib/sentry/baggage.rb +2/-2
lib/sentry/breadcrumb.rb +1/-1
lib/sentry/breadcrumb_buffer.rb +2/-2
lib/sentry/check_in_event.rb +2/-2
lib/sentry/client.rb +59/-136
lib/sentry/configuration.rb +206/-78
lib/sentry/cron/monitor_check_ins.rb +3/-3
lib/sentry/cron/monitor_config.rb +2/-2
lib/sentry/cron/monitor_schedule.rb +2/-2
lib/sentry/dsn.rb +65/-1
lib/sentry/envelope/item.rb +3/-3
lib/sentry/error_event.rb +3/-3
lib/sentry/event.rb +4/-10
lib/sentry/exceptions.rb +3/-0
lib/sentry/graphql.rb +1/-1
lib/sentry/hub.rb +29/-5
lib/sentry/interface.rb +1/-1
lib/sentry/interfaces/exception.rb +2/-2
lib/sentry/interfaces/request.rb +2/-0
lib/sentry/interfaces/single_exception.rb +4/-4
lib/sentry/interfaces/stacktrace.rb +3/-3
lib/sentry/interfaces/stacktrace_builder.rb +0/-8
lib/sentry/interfaces/threads.rb +2/-2
lib/sentry/log_event.rb +32/-137
lib/sentry/log_event_buffer.rb +13/-60
lib/sentry/metrics.rb +47/-42
lib/sentry/profiler.rb +4/-5
lib/sentry/propagation_context.rb +101/-24
lib/sentry/rack/capture_exceptions.rb +90/-2
lib/sentry/release_detector.rb +1/-1
lib/sentry/rspec.rb +1/-1
lib/sentry/scope.rb +51/-18
lib/sentry/span.rb +5/-17
lib/sentry/std_lib_logger.rb +10/-1
lib/sentry/test_helper.rb +30/-0
lib/sentry/transaction.rb +73/-95
lib/sentry/transaction_event.rb +4/-9
lib/sentry/transport.rb +10/-7
lib/sentry/transport/dummy_transport.rb +1/-0
lib/sentry/transport/http_transport.rb +16/-16
lib/sentry/utils/encoding_helper.rb +6/-0
lib/sentry/utils/logging_helper.rb +25/-9
lib/sentry/vernier/profiler.rb +4/-3
lib/sentry/version.rb +1/-1
sentry-ruby-core.gemspec +1/-1
sentry-ruby.gemspec +2/-1
DIFFERENT extra_rdoc_files:
5.26.0->6.5.0:
* Changed:
README.md +3/-3
DIFFERENT runtime dependencies:
5.26.0->6.5.0:
* Added:
logger [">= 0"] (runtime)
DIFFERENT Gemfile dependencies
5.26.0->6.5.0:
* Added:
graphql [">= 2.2.6"] (runtime)
sequel [">= 0"] (development)
activerecord-jdbcmysql-adapter [">= 0"] (development)
jdbc-sqlite3 [">= 0"] (development) |
Contributor
gem compare --diff concurrent-ruby 1.3.5 1.3.6Compared versions: ["1.3.5", "1.3.6"]
DIFFERENT files:
1.3.5->1.3.6:
* Added:
lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
--- /tmp/20260317-944-7v0acu 2026-03-17 03:34:35.220939608 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb 2026-03-17 03:34:35.208939596 +0000
@@ -0,0 +1,55 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro ruby_timeout_queue
+ class RubyTimeoutQueue < ::Queue
+ def initialize(*args)
+ if RUBY_VERSION >= '3.2'
+ raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
+ end
+
+ super(*args)
+
+ @mutex = Mutex.new
+ @cond_var = ConditionVariable.new
+ end
+
+ def push(obj)
+ @mutex.synchronize do
+ super(obj)
+ @cond_var.signal
+ end
+ end
+ alias_method :enq, :push
+ alias_method :<<, :push
+
+ def pop(non_block = false, timeout: nil)
+ if non_block && timeout
+ raise ArgumentError, "can't set a timeout if non_block is enabled"
+ end
+
+ if non_block
+ super(true)
+ elsif timeout
+ @mutex.synchronize do
+ deadline = Concurrent.monotonic_time + timeout
+ while (now = Concurrent.monotonic_time) < deadline && empty?
+ @cond_var.wait(@mutex, deadline - now)
+ end
+ begin
+ return super(true)
+ rescue ThreadError
+ # still empty
+ nil
+ end
+ end
+ else
+ super(false)
+ end
+ end
+ alias_method :deq, :pop
+ alias_method :shift, :pop
+ end
+ private_constant :RubyTimeoutQueue
+ end
+end
lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
--- /tmp/20260317-944-10zgcz 2026-03-17 03:34:35.223939611 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb 2026-03-17 03:34:35.208939596 +0000
@@ -0,0 +1,18 @@
+module Concurrent
+ module Collection
+ # @!visibility private
+ # @!macro internal_implementation_note
+ TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
+ ::Queue
+ else
+ require 'concurrent/collection/ruby_timeout_queue'
+ RubyTimeoutQueue
+ end
+ private_constant :TimeoutQueueImplementation
+
+ # @!visibility private
+ # @!macro timeout_queue
+ class TimeoutQueue < TimeoutQueueImplementation
+ end
+ end
+end
* Changed:
CHANGELOG.md
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/CHANGELOG.md 2026-03-17 03:34:35.175939562 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/CHANGELOG.md 2026-03-17 03:34:35.198939586 +0000
@@ -2,0 +3,6 @@
+## Release v1.3.6 (13 December 2025)
+
+concurrent-ruby:
+
+* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
+
README.md
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/README.md 2026-03-17 03:34:35.176939563 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/README.md 2026-03-17 03:34:35.198939586 +0000
@@ -210 +210 @@
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
+keep backward compatibility (they may also lack tests and documentation). Semantic versions will
@@ -361 +361,2 @@
-* Install Docker, required for Windows builds
+* Install Docker or Podman, required for Windows builds
+* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
@@ -380,0 +382 @@
+* [Joshua Young](https://github.com/joshuay03)
lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:34:35.185939572 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb 2026-03-17 03:34:35.205939593 +0000
@@ -8,0 +9 @@
+ return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
lib/concurrent-ruby/concurrent/concurrent_ruby.jar
Binary files /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:34:35.191939578 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb 2026-03-17 03:34:35.211939599 +0000
@@ -84,4 +84,2 @@
- # This is a no-op on some pool implementation (e.g. the Java one). The Ruby
- # pool will auto-prune each time a new job is posted. You will need to call
- # this method explicitly in case your application post jobs in bursts (a
- # lot of jobs and then nothing for long periods)
+ # This is a no-op on all pool implementations as they prune themselves
+ # automatically, and has been deprecated.
lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:34:35.191939578 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb 2026-03-17 03:34:35.212939600 +0000
@@ -48,0 +49 @@
+ wait_for_termination
lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:34:35.191939578 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb 2026-03-17 03:34:35.212939600 +0000
@@ -10,0 +11 @@
+ include Concern::Deprecation
@@ -102,0 +104 @@
+ deprecated "#prune_pool has no effect and will be removed in the next release."
lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:34:35.191939578 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb 2026-03-17 03:34:35.212939600 +0000
@@ -1,0 +2 @@
+require 'concurrent/executor/serial_executor_service'
@@ -8,0 +10 @@
+ include SerialExecutorService
lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:34:35.191939578 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb 2026-03-17 03:34:35.212939600 +0000
@@ -5,0 +6 @@
+require 'concurrent/collection/timeout_queue'
@@ -12,0 +14 @@
+ include Concern::Deprecation
@@ -96,0 +99,4 @@
+ # removes the worker if it can be pruned
+ #
+ # @return [true, false] if the worker was pruned
+ #
@@ -98,2 +104,17 @@
- def remove_busy_worker(worker)
- synchronize { ns_remove_busy_worker worker }
+ def prune_worker(worker)
+ synchronize do
+ if ns_prunable_capacity > 0
+ remove_worker worker
+ true
+ else
+ false
+ end
+ end
+ end
+
+ # @!visibility private
+ def remove_worker(worker)
+ synchronize do
+ ns_remove_ready_worker worker
+ ns_remove_busy_worker worker
+ end
@@ -119 +140 @@
- synchronize { ns_prune_pool }
+ deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
@@ -149,3 +169,0 @@
-
- @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
@@ -164,0 +183 @@
+ nil
@@ -166 +185 @@
- return fallback_action(*args, &task)
+ fallback_action(*args, &task)
@@ -168,3 +186,0 @@
-
- ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
- nil
@@ -221 +237 @@
-
+
@@ -268 +284 @@
- # removes a worker which is not in not tracked in @ready
+ # removes a worker which is not tracked in @ready
@@ -277,2 +292,0 @@
- # try oldest worker if it is idle for enough time, it's returned back at the start
- #
@@ -280,11 +294,3 @@
- def ns_prune_pool
- now = Concurrent.monotonic_time
- stopped_workers = 0
- while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
- worker, last_message = @ready.first
- if now - last_message > self.idletime
- stopped_workers += 1
- @ready.shift
- worker << :stop
- else break
- end
+ def ns_remove_ready_worker(worker)
+ if index = @ready.index { |rw, _| rw == worker }
+ @ready.delete_at(index)
@@ -291,0 +298,2 @@
+ true
+ end
@@ -293 +301,10 @@
- @next_gc_time = Concurrent.monotonic_time + @gc_interval
+ # @return [Integer] number of excess idle workers which can be removed without
+ # going below min_length, or all workers if not running
+ #
+ # @!visibility private
+ def ns_prunable_capacity
+ if running?
+ [@pool.size - @min_length, @ready.size].min
+ else
+ @pool.size
+ end
@@ -295,0 +313 @@
+ # @!visibility private
@@ -315 +333 @@
- @queue = Queue.new
+ @queue = Collection::TimeoutQueue.new
@@ -341 +359 @@
- loop do
+ prunable = true
@@ -343 +361,6 @@
- case message = my_queue.pop
+ loop do
+ timeout = prunable && my_pool.running? ? my_idletime : nil
+ case message = my_queue.pop(timeout: timeout)
+ when nil
+ throw :stop if my_pool.prune_worker(self)
+ prunable = false
@@ -345 +368 @@
- my_pool.remove_busy_worker(self)
+ my_pool.remove_worker(self)
@@ -347 +369,0 @@
-
@@ -351,0 +374 @@
+ prunable = true
lib/concurrent-ruby/concurrent/executor/timer_set.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:34:35.192939579 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb 2026-03-17 03:34:35.213939601 +0000
@@ -63,0 +64 @@
+ @timer_executor.kill
@@ -125 +126,3 @@
- @timer_executor.kill
+ @condition.set
+ @condition.reset
+ @timer_executor.shutdown
lib/concurrent-ruby/concurrent/executors.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:34:35.192939579 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb 2026-03-17 03:34:35.213939601 +0000
@@ -13 +12,0 @@
-require 'concurrent/executor/cached_thread_pool'
lib/concurrent-ruby/concurrent/mvar.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:34:35.193939580 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb 2026-03-17 03:34:35.215939603 +0000
@@ -12 +12 @@
- # `#mutate` that is atomic with respect to operations on the same instance.
+ # `#modify` that is atomic with respect to operations on the same instance.
@@ -90 +90 @@
- # if we timeoud out we'll still be empty
+ # If we timed out we'll still be empty
@@ -119 +119 @@
- # `put` the transformed value. Returns the transformed value. A timeout can
+ # `put` the transformed value. Returns the pre-transform value. A timeout can
@@ -122 +122 @@
- # @return [Object] the transformed value, or `TIMEOUT`
+ # @return [Object] the pre-transform value, or `TIMEOUT`
lib/concurrent-ruby/concurrent/promise.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:34:35.193939580 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb 2026-03-17 03:34:35.215939603 +0000
@@ -170 +170 @@
- # c1.value #=> 45
+ # c1.value #=> 42
lib/concurrent-ruby/concurrent/timer_task.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:34:35.197939585 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb 2026-03-17 03:34:35.219939607 +0000
@@ -4,0 +5 @@
+require 'concurrent/atomic/atomic_fixnum'
@@ -238,0 +240 @@
+ @age.increment
@@ -311,0 +314 @@
+ @age = Concurrent::AtomicFixnum.new(0)
@@ -331 +334 @@
- ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
+ ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
@@ -336 +339 @@
- def execute_task(completion)
+ def execute_task(completion, age_when_scheduled)
@@ -337,0 +341,2 @@
+ return nil unless @age.value == age_when_scheduled
+
lib/concurrent-ruby/concurrent/version.rb
--- /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:34:35.197939585 +0000
+++ /tmp/d20260317-944-r4kilk/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb 2026-03-17 03:34:35.220939608 +0000
@@ -2 +2 @@
- VERSION = '1.3.5'
+ VERSION = '1.3.6' |
Contributor
|
Contributor
|
Contributor
gem compare sentry-ruby 5.26.0 6.5.0Compared versions: ["5.26.0", "6.5.0"]
DIFFERENT homepage:
5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
6.5.0: https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby
DIFFERENT metadata:
5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
6.5.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.5.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.5.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.5.0"}
DIFFERENT required_ruby_version:
5.26.0: >= 2.4
6.5.0: >= 2.7
DIFFERENT rubygems_version:
5.26.0: 3.6.7
6.5.0: 3.6.9
DIFFERENT version:
5.26.0: 5.26.0
6.5.0: 6.5.0
DIFFERENT files:
5.26.0->6.5.0:
* Deleted:
lib/sentry/metrics/aggregator.rb
lib/sentry/metrics/configuration.rb
lib/sentry/metrics/counter_metric.rb
lib/sentry/metrics/distribution_metric.rb
lib/sentry/metrics/gauge_metric.rb
lib/sentry/metrics/local_aggregator.rb
lib/sentry/metrics/metric.rb
lib/sentry/metrics/set_metric.rb
lib/sentry/metrics/timing.rb
* Added:
lib/sentry/backtrace/line.rb +99/-0
lib/sentry/debug_structured_logger.rb +94/-0
lib/sentry/metric_event.rb +49/-0
lib/sentry/metric_event_buffer.rb +28/-0
lib/sentry/sequel.rb +35/-0
lib/sentry/telemetry_event_buffer.rb +130/-0
lib/sentry/transport/debug_transport.rb +70/-0
lib/sentry/utils/sample_rand.rb +97/-0
lib/sentry/utils/telemetry_attributes.rb +30/-0
* Changed:
Gemfile +27/-5
README.md +3/-3
lib/sentry-ruby.rb +56/-29
lib/sentry/background_worker.rb +1/-4
lib/sentry/backtrace.rb +44/-76
lib/sentry/baggage.rb +2/-2
lib/sentry/breadcrumb.rb +1/-1
lib/sentry/breadcrumb_buffer.rb +2/-2
lib/sentry/check_in_event.rb +2/-2
lib/sentry/client.rb +59/-136
lib/sentry/configuration.rb +206/-78
lib/sentry/cron/monitor_check_ins.rb +3/-3
lib/sentry/cron/monitor_config.rb +2/-2
lib/sentry/cron/monitor_schedule.rb +2/-2
lib/sentry/dsn.rb +65/-1
lib/sentry/envelope/item.rb +3/-3
lib/sentry/error_event.rb +3/-3
lib/sentry/event.rb +4/-10
lib/sentry/exceptions.rb +3/-0
lib/sentry/graphql.rb +1/-1
lib/sentry/hub.rb +29/-5
lib/sentry/interface.rb +1/-1
lib/sentry/interfaces/exception.rb +2/-2
lib/sentry/interfaces/request.rb +2/-0
lib/sentry/interfaces/single_exception.rb +4/-4
lib/sentry/interfaces/stacktrace.rb +3/-3
lib/sentry/interfaces/stacktrace_builder.rb +0/-8
lib/sentry/interfaces/threads.rb +2/-2
lib/sentry/log_event.rb +32/-137
lib/sentry/log_event_buffer.rb +13/-60
lib/sentry/metrics.rb +47/-42
lib/sentry/profiler.rb +4/-5
lib/sentry/propagation_context.rb +101/-24
lib/sentry/rack/capture_exceptions.rb +90/-2
lib/sentry/release_detector.rb +1/-1
lib/sentry/rspec.rb +1/-1
lib/sentry/scope.rb +51/-18
lib/sentry/span.rb +5/-17
lib/sentry/std_lib_logger.rb +10/-1
lib/sentry/test_helper.rb +30/-0
lib/sentry/transaction.rb +73/-95
lib/sentry/transaction_event.rb +4/-9
lib/sentry/transport.rb +10/-7
lib/sentry/transport/dummy_transport.rb +1/-0
lib/sentry/transport/http_transport.rb +16/-16
lib/sentry/utils/encoding_helper.rb +6/-0
lib/sentry/utils/logging_helper.rb +25/-9
lib/sentry/vernier/profiler.rb +4/-3
lib/sentry/version.rb +1/-1
sentry-ruby-core.gemspec +1/-1
sentry-ruby.gemspec +2/-1
DIFFERENT extra_rdoc_files:
5.26.0->6.5.0:
* Changed:
README.md +3/-3
DIFFERENT runtime dependencies:
5.26.0->6.5.0:
* Added:
logger [">= 0"] (runtime)
DIFFERENT Gemfile dependencies
5.26.0->6.5.0:
* Added:
graphql [">= 2.2.6"] (runtime)
sequel [">= 0"] (development)
activerecord-jdbcmysql-adapter [">= 0"] (development)
jdbc-sqlite3 [">= 0"] (development) |
Contributor
|
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.
Bumps sentry-ruby from 5.26.0 to 6.5.0.
Changelog
Sourced from sentry-ruby's changelog.
... (truncated)
Commits
a34b047release: 6.5.0d61d271fix: Copy event processors on Scope#dup (#2893)8205acbfix(release-detector): Prefer HEROKU_BUILD_COMMIT over deprecated HEROKU_SLUG...2c1c8b7feat(transport): Handle HTTP 413 response for oversized envelopes (#2885)5685885fix: Don't transform attributes in place in metrics (#2883)d8352b6test: fix flaky request timing tests (#2882)cfcab4bfeat: Implement strict trace continuation (#2872)a640799release: 6.4.166c2ad1fix(rails): Track request queue time in Rails middleware (#2877)38b827drelease: 6.4.0Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)