Merge branch 'sh-terminate-pg-connections-on-setup' into 'master'
Kill all PostgreSQL connections for rake dev:setup Closes gitlab-development-kit#450 See merge request gitlab-org/gitlab-ce!24743
This commit is contained in:
commit
885e2a9c93
|
|
@ -25,6 +25,11 @@ namespace :gitlab do
|
||||||
puts ""
|
puts ""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# In production, we might want to prevent ourselves from shooting
|
||||||
|
# ourselves in the foot, so let's only do this in a test or
|
||||||
|
# development environment.
|
||||||
|
terminate_all_connections unless Rails.env.production?
|
||||||
|
|
||||||
Rake::Task["db:reset"].invoke
|
Rake::Task["db:reset"].invoke
|
||||||
Rake::Task["add_limits_mysql"].invoke
|
Rake::Task["add_limits_mysql"].invoke
|
||||||
Rake::Task["setup_postgresql"].invoke
|
Rake::Task["setup_postgresql"].invoke
|
||||||
|
|
@ -33,4 +38,24 @@ namespace :gitlab do
|
||||||
puts "Quitting...".color(:red)
|
puts "Quitting...".color(:red)
|
||||||
exit 1
|
exit 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# If there are any clients connected to the DB, PostgreSQL won't let
|
||||||
|
# you drop the database. It's possible that Sidekiq, Unicorn, or
|
||||||
|
# some other client will be hanging onto a connection, preventing
|
||||||
|
# the DROP DATABASE from working. To workaround this problem, this
|
||||||
|
# method terminates all the connections so that a subsequent DROP
|
||||||
|
# will work.
|
||||||
|
def self.terminate_all_connections
|
||||||
|
return false unless Gitlab::Database.postgresql?
|
||||||
|
|
||||||
|
cmd = <<~SQL
|
||||||
|
SELECT pg_terminate_backend(pg_stat_activity.pid)
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE datname = current_database()
|
||||||
|
AND pid <> pg_backend_pid();
|
||||||
|
SQL
|
||||||
|
|
||||||
|
ActiveRecord::Base.connection.execute(cmd)&.result_status == PG::PGRES_TUPLES_OK
|
||||||
|
rescue ActiveRecord::NoDatabaseError
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue