Skip to content

Commit

Permalink
Merge pull request rails#36873 from jhawthorn/schema_sha_parallel
Browse files Browse the repository at this point in the history
Sync parallel test DBs to schema using SHA
  • Loading branch information
jhawthorn committed Aug 9, 2019
1 parent 0169c93 commit 4f912de
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 16 deletions.
18 changes: 18 additions & 0 deletions activerecord/lib/active_record/tasks/database_tasks.rb
Expand Up @@ -348,6 +348,24 @@ def schema_up_to_date?(configuration, format = ActiveRecord::Base.schema_format,
ActiveRecord::InternalMetadata[:schema_sha1] == schema_sha1(file)
end

def reconstruct_from_schema(configuration, format = ActiveRecord::Base.schema_format, file = nil, environment = env, spec_name = "primary") # :nodoc:
file ||= dump_filename(spec_name, format)

check_schema_file(file)

ActiveRecord::Base.establish_connection(configuration)

if schema_up_to_date?(configuration, format, file, environment, spec_name)
truncate_tables(configuration)
else
purge(configuration)
load_schema(configuration, format, file, environment, spec_name)
end
rescue ActiveRecord::NoDatabaseError
create(configuration)
load_schema(configuration, format, file, environment, spec_name)
end

def dump_schema(configuration, format = ActiveRecord::Base.schema_format, spec_name = "primary") # :nodoc:
require "active_record/schema_dumper"
filename = dump_filename(spec_name, format)
Expand Down
17 changes: 1 addition & 16 deletions activerecord/lib/active_record/test_databases.rb
Expand Up @@ -8,31 +8,16 @@ module TestDatabases # :nodoc:
create_and_load_schema(i, env_name: Rails.env)
end

ActiveSupport::Testing::Parallelization.run_cleanup_hook do
drop(env_name: Rails.env)
end

def self.create_and_load_schema(i, env_name:)
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"

ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
db_config.config["database"] += "-#{i}"
ActiveRecord::Tasks::DatabaseTasks.create(db_config.config)
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
ActiveRecord::Tasks::DatabaseTasks.reconstruct_from_schema(db_config.config, ActiveRecord::Base.schema_format, nil, env_name, db_config.spec_name)
end
ensure
ActiveRecord::Base.establish_connection(Rails.env.to_sym)
ENV["VERBOSE"] = old
end

def self.drop(env_name:)
old, ENV["VERBOSE"] = ENV["VERBOSE"], "false"

ActiveRecord::Base.configurations.configs_for(env_name: env_name).each do |db_config|
ActiveRecord::Tasks::DatabaseTasks.drop(db_config.config)
end
ensure
ENV["VERBOSE"] = old
end
end
end

0 comments on commit 4f912de

Please sign in to comment.