Skip to content

Commit

Permalink
Fix flaky advisory lock test.
Browse files Browse the repository at this point in the history
Random failures due to active connection checking within the
assert_no_changes block.

Failure:
MigrationTest#test_with_advisory_lock_closes_connection [/rails/activerecord/test/cases/migration_test.rb:947]:
--- expected
+++ actual
@@ -1 +1 @@
-["SELECT 1", "SELECT 1"]
+["SELECT 1", "SELECT 1", "SELECT 1"]

This commit scopes the query down further to ensure that the advisory
unlock query is not left in pg_stat_activity which is an indication that
the connection pool was not disconnected.
  • Loading branch information
tgxworld committed Oct 13, 2020
1 parent 5699122 commit d221558
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion activerecord/test/cases/migration_test.rb
Expand Up @@ -942,7 +942,15 @@ def migrate(x)
}.new

migrator = ActiveRecord::Migrator.new(:up, [migration], @schema_migration, 100)
query = "SELECT query FROM pg_stat_activity WHERE datname = '#{ActiveRecord::Base.connection_db_config.database}' AND state = 'idle'"
lock_id = migrator.send(:generate_migrator_advisory_lock_id)

query = <<~SQL
SELECT query
FROM pg_stat_activity
WHERE datname = '#{ActiveRecord::Base.connection_db_config.database}'
AND state = 'idle'
AND query LIKE '%#{lock_id}%'
SQL

assert_no_changes -> { ActiveRecord::Base.connection.exec_query(query).rows.flatten } do
migrator.migrate
Expand Down

0 comments on commit d221558

Please sign in to comment.