Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Mountney <david@twkie.net>2019-06-20 09:35:56 +0300
committerDJ Mountney <david@twkie.net>2019-06-25 20:44:40 +0300
commit7a089438fa138934b5dab7bdd575a74a1dfd03c0 (patch)
tree70adb17a83b29ad3901f3a5b86a7ee7f8a37e383
parent4d1e2ec45e993c8d9ebf3d379b5d1f20d3684658 (diff)
Check supported version when migrating
Set the mininum supported migration version to be the schema version as of 11.11.0, and errors you if that is not detected during gitlab:db:configure
-rw-r--r--changelogs/unreleased/check-min-schema-migrate.yml5
-rw-r--r--doc/update/upgrading_from_source.md2
-rw-r--r--lib/gitlab/database.rb4
-rw-r--r--lib/tasks/gitlab/db.rake4
-rw-r--r--spec/tasks/gitlab/db_rake_spec.rb7
5 files changed, 21 insertions, 1 deletions
diff --git a/changelogs/unreleased/check-min-schema-migrate.yml b/changelogs/unreleased/check-min-schema-migrate.yml
new file mode 100644
index 00000000000..7c954d31b12
--- /dev/null
+++ b/changelogs/unreleased/check-min-schema-migrate.yml
@@ -0,0 +1,5 @@
+---
+title: Added a min schema version check to gitlab:db:configure
+merge_request:
+author:
+type: added
diff --git a/doc/update/upgrading_from_source.md b/doc/update/upgrading_from_source.md
index 023dc7d6de3..e454f4b2c0d 100644
--- a/doc/update/upgrading_from_source.md
+++ b/doc/update/upgrading_from_source.md
@@ -324,7 +324,7 @@ sudo -u git -H bundle install --deployment --without development test mysql aws
sudo -u git -H bundle clean
# Run database migrations
-sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
+sudo -u git -H bundle exec rake gitlab:db:configure RAILS_ENV=production
# Compile GetText PO files
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index e4d4779ba9a..5e5b79b8e99 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -11,6 +11,10 @@ module Gitlab
# https://dev.mysql.com/doc/refman/5.7/en/datetime.html
MAX_TIMESTAMP_VALUE = Time.at((1 << 31) - 1).freeze
+ # Minimum schema version from which migrations are be supported
+ # Migrations before this version may have been removed
+ MIN_SCHEMA_VERSION = 20190506135400
+
def self.config
ActiveRecord::Base.configurations[Rails.env]
end
diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake
index 4e7a8adbef6..3a371de5bb7 100644
--- a/lib/tasks/gitlab/db.rake
+++ b/lib/tasks/gitlab/db.rake
@@ -53,6 +53,10 @@ namespace :gitlab do
# Check if we have existing db tables
# The schema_migrations table will still exist if drop_tables was called
if ActiveRecord::Base.connection.tables.count > 1
+ if ActiveRecord::Migrator.current_version < Gitlab::Database::MIN_SCHEMA_VERSION
+ raise "Your current database version is too old to be migrated. Please see https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations"
+ end
+
Rake::Task['db:migrate'].invoke
else
# Add post-migrate paths to ensure we mark all migrations as up
diff --git a/spec/tasks/gitlab/db_rake_spec.rb b/spec/tasks/gitlab/db_rake_spec.rb
index 5818892d56a..f61c03e5cf0 100644
--- a/spec/tasks/gitlab/db_rake_spec.rb
+++ b/spec/tasks/gitlab/db_rake_spec.rb
@@ -16,6 +16,7 @@ describe 'gitlab:db namespace rake task' do
allow(Rake::Task['db:migrate']).to receive(:invoke).and_return(true)
allow(Rake::Task['db:schema:load']).to receive(:invoke).and_return(true)
allow(Rake::Task['db:seed_fu']).to receive(:invoke).and_return(true)
+ allow(ActiveRecord::Migrator).to receive(:current_version).and_return(Gitlab::Database::MIN_SCHEMA_VERSION)
end
describe 'configure' do
@@ -27,6 +28,12 @@ describe 'gitlab:db namespace rake task' do
expect { run_rake_task('gitlab:db:configure') }.not_to raise_error
end
+ it 'raises an when schema has been loaded, but version is too old to migrate' do
+ allow(ActiveRecord::Base.connection).to receive(:tables).and_return(%w[table1 table2])
+ allow(ActiveRecord::Migrator).to receive(:current_version).and_return(25)
+ expect { run_rake_task('gitlab:db:configure') }.to raise_error(RuntimeErrorm, /current database version is too old to be migrated/)
+ end
+
it 'invokes db:shema:load and db:seed_fu when schema is not loaded' do
allow(ActiveRecord::Base.connection).to receive(:tables).and_return([])
expect(Rake::Task['db:schema:load']).to receive(:invoke)