mirror of https://github.com/rails/rails
Merge pull request #50670 from byroot/active-support-after-fork-check
Get rid of `ForkTracker.check!`
This commit is contained in:
commit
fc75fed35a
|
@ -55,9 +55,6 @@ module ActiveRecord
|
||||||
# about the model. The model needs to pass a connection specification name to the handler,
|
# about the model. The model needs to pass a connection specification name to the handler,
|
||||||
# in order to look up the correct connection pool.
|
# in order to look up the correct connection pool.
|
||||||
class ConnectionHandler
|
class ConnectionHandler
|
||||||
FINALIZER = lambda { |_| ActiveSupport::ForkTracker.check! }
|
|
||||||
private_constant :FINALIZER
|
|
||||||
|
|
||||||
class StringConnectionName # :nodoc:
|
class StringConnectionName # :nodoc:
|
||||||
attr_reader :name
|
attr_reader :name
|
||||||
|
|
||||||
|
@ -77,9 +74,6 @@ module ActiveRecord
|
||||||
def initialize
|
def initialize
|
||||||
# These caches are keyed by pool_config.connection_name (PoolConfig#connection_name).
|
# These caches are keyed by pool_config.connection_name (PoolConfig#connection_name).
|
||||||
@connection_name_to_pool_manager = Concurrent::Map.new(initial_capacity: 2)
|
@connection_name_to_pool_manager = Concurrent::Map.new(initial_capacity: 2)
|
||||||
|
|
||||||
# Backup finalizer: if the forked child skipped Kernel#fork the early discard has not occurred
|
|
||||||
ObjectSpace.define_finalizer self, FINALIZER
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def prevent_writes # :nodoc:
|
def prevent_writes # :nodoc:
|
||||||
|
|
|
@ -50,8 +50,6 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def disconnect!(automatic_reconnect: false)
|
def disconnect!(automatic_reconnect: false)
|
||||||
ActiveSupport::ForkTracker.check!
|
|
||||||
|
|
||||||
return unless @pool
|
return unless @pool
|
||||||
|
|
||||||
synchronize do
|
synchronize do
|
||||||
|
@ -65,8 +63,6 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def pool
|
def pool
|
||||||
ActiveSupport::ForkTracker.check!
|
|
||||||
|
|
||||||
@pool || synchronize { @pool ||= ConnectionAdapters::ConnectionPool.new(self) }
|
@pool || synchronize { @pool ||= ConnectionAdapters::ConnectionPool.new(self) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,14 +24,6 @@ module ActiveSupport
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if Process.respond_to?(:_fork) # Ruby 3.1+
|
|
||||||
def check!
|
|
||||||
# We trust the `_fork` callback
|
|
||||||
end
|
|
||||||
else
|
|
||||||
alias_method :check!, :after_fork_callback
|
|
||||||
end
|
|
||||||
|
|
||||||
def hook!
|
def hook!
|
||||||
::Process.singleton_class.prepend(CoreExt)
|
::Process.singleton_class.prepend(CoreExt)
|
||||||
end
|
end
|
||||||
|
|
|
@ -152,39 +152,6 @@ class ForkTrackerTest < ActiveSupport::TestCase
|
||||||
ActiveSupport::ForkTracker.unregister(handler)
|
ActiveSupport::ForkTracker.unregister(handler)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_check
|
|
||||||
count = 0
|
|
||||||
handler = ActiveSupport::ForkTracker.after_fork { count += 1 }
|
|
||||||
|
|
||||||
assert_no_difference -> { count } do
|
|
||||||
3.times { ActiveSupport::ForkTracker.check! }
|
|
||||||
end
|
|
||||||
|
|
||||||
if Process.respond_to?(:_fork)
|
|
||||||
Process.stub(:pid, Process.pid + 1) do
|
|
||||||
assert_no_difference -> { count } do
|
|
||||||
3.times { ActiveSupport::ForkTracker.check! }
|
|
||||||
end
|
|
||||||
|
|
||||||
assert_no_difference -> { count } do
|
|
||||||
3.times { ActiveSupport::ForkTracker.check! }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Process.stub(:pid, Process.pid + 1) do
|
|
||||||
assert_difference -> { count }, +1 do
|
|
||||||
3.times { ActiveSupport::ForkTracker.check! }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
assert_difference -> { count }, +1 do
|
|
||||||
3.times { ActiveSupport::ForkTracker.check! }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
ensure
|
|
||||||
ActiveSupport::ForkTracker.unregister(handler)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_basic_object_with_kernel_fork
|
def test_basic_object_with_kernel_fork
|
||||||
read, write = IO.pipe
|
read, write = IO.pipe
|
||||||
called = false
|
called = false
|
||||||
|
|
Loading…
Reference in New Issue