aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG.md6
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb13
-rw-r--r--activerecord/test/cases/adapters/postgresql/prepared_statements_test.rb8
-rw-r--r--activerecord/test/config.example.yml3
-rw-r--r--activerecord/test/support/config.rb3
-rw-r--r--railties/CHANGELOG.md6
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*