Migration db/post_migrate/20170313133418_rename_more_reserved_project_names.rb re-uses connection objects between threads
The migration db/post_migrate/20170313133418_rename_more_reserved_project_names.rb
uses ActiveRecord::Base.connection
or a migration's default connection
method in different threads. This can lead to threads being unable to obtain a database connection depending on the pool size. For GitLab.com the pool size of Unicorn is 1, preventing this migration from running concurrently.
Migrations using multiple threads should use Gitlab::Database.create_connection_pool
instead, and overwrite connection
in the migration similar to this:
def connection
# Rails memoizes connection objects, but this causes them to be shared
# amongst threads; we don't want that.
Thread.current[:thread_local_connection] || ActiveRecord::Base.connection
end
Thread.current[:thread_local_connection]
then has to be set before starting work. This allows methods such as disable_statement_timeout
/ etc to work transparently.