diff options
-rw-r--r-- | actionpack/CHANGELOG.md | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb | 13 | ||||
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb | 8 | ||||
-rw-r--r-- | activerecord/test/config.example.yml | 3 | ||||
-rw-r--r-- | activerecord/test/support/config.rb | 3 | ||||
-rw-r--r-- | railties/CHANGELOG.md | 6 |
6 files changed, 22 insertions, 17 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 8de47fe9e1..0c8625ae08 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,3 +1,9 @@ +* Reset a new session directly after its creation in ActionDispatch::IntegrationTest#open_session. + + Fixes #22742. + + *Tawan Sierek* + * Fixes incorrect output from rails routes when using singular resources. Fixes #26606. diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb index e6b6b60c1b..c9f907b281 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb @@ -350,8 +350,7 @@ module ActiveRecord # currently in the process of independently establishing connections to the DB. @now_connecting = 0 - # A boolean toggle that allows/disallows new connections. - @new_cons_enabled = true + @threads_blocking_new_connections = 0 @available = ConnectionLeasingQueue.new self end @@ -700,13 +699,15 @@ module ActiveRecord end def with_new_connections_blocked - previous_value = nil synchronize do - previous_value, @new_cons_enabled = @new_cons_enabled, false + @threads_blocking_new_connections += 1 end + yield ensure - synchronize { @new_cons_enabled = previous_value } + synchronize do + @threads_blocking_new_connections -= 1 + end end # Acquire a connection by one of 1) immediately removing one @@ -758,7 +759,7 @@ module ActiveRecord # and increment @now_connecting, to prevent overstepping this pool's @size # constraint do_checkout = synchronize do - if @new_cons_enabled && (@connections.size + @now_connecting) < @size + if @threads_blocking_new_connections.zero? && (@connections.size + @now_connecting) < @size @now_connecting += 1 end end diff --git a/activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb b/activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb index 181c1a097c..1214b28366 100644 --- a/activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb +++ b/activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb @@ -6,17 +6,17 @@ class PreparedStatementsTest < ActiveRecord::PostgreSQLTestCase fixtures :developers def setup - @default_prepared_statements = ActiveRecord::Base.connection.instance_variable_get("@prepared_statements") - ActiveRecord::Base.connection.instance_variable_set("@prepared_statements", false) + @conn = ActiveRecord::Base.establish_connection :arunit_with_prepared_statements end def teardown - ActiveRecord::Base.connection.instance_variable_set("@prepared_statements", @default_prepared_statements) + @conn.release_connection + ActiveRecord::Base.establish_connection :arunit end def test_nothing_raised_with_falsy_prepared_statements assert_nothing_raised do - Developer.where(id: 1) + Developer.where(id: 1).to_a end end end diff --git a/activerecord/test/config.example.yml b/activerecord/test/config.example.yml index 58e2d45748..4bcb2aeea6 100644 --- a/activerecord/test/config.example.yml +++ b/activerecord/test/config.example.yml @@ -77,6 +77,9 @@ connections: postgresql: arunit: min_messages: warning + arunit_without_prepared_statements: + min_messages: warning + prepared_statements: false arunit2: min_messages: warning diff --git a/activerecord/test/support/config.rb b/activerecord/test/support/config.rb index 5817e427e3..e1aa8d72e3 100644 --- a/activerecord/test/support/config.rb +++ b/activerecord/test/support/config.rb @@ -26,7 +26,8 @@ module ARTest def expand_config(config) config["connections"].each do |adapter, connection| - dbs = [["arunit", "activerecord_unittest"], ["arunit2", "activerecord_unittest2"]] + dbs = [["arunit", "activerecord_unittest"], ["arunit2", "activerecord_unittest2"], + ["arunit_with_prepared_statements", "activerecord_unittest"]] dbs.each do |name, dbname| unless connection[name].is_a?(Hash) connection[name] = { "database" => connection[name] } diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 049a06db3a..7db7e2e34d 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,9 +1,3 @@ -* Reset a new session directly after its creation in ActionDispatch::IntegrationTest#open_session - - Fixes Issue #22742 - - *Tawan Sierek* - * Add `:skip_sprockets` to `Rails::PluginBuilder::PASSTHROUGH_OPTIONS` *Tsukuru Tanimichi* |