Commit 6d7bf439 authored by Yorick Peterse's avatar Yorick Peterse

Enforce a default snippet access level in the DB

This adds a database migration that ensures that
project_features.snippets_access_level defaults to a value of 20 (=
ProjectFeature::ENABLED), instead of NULL. This allows us to simplify
some of the queries used for obtaining snippets, as we no longer need to
handle cases where this column is NULL.
parent 8e674510
# frozen_string_literal: true
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class MigrateSnippetsAccessLevelDefaultValue < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
ENABLED = 20
disable_ddl_transaction!
class ProjectFeature < ActiveRecord::Base
include EachBatch
self.table_name = 'project_features'
end
def up
change_column_default :project_features, :snippets_access_level, ENABLED
# On GitLab.com this will update about 28 000 rows. Since our updates are
# very small and this column is not indexed, these updates should be very
# lightweight.
ProjectFeature.where(snippets_access_level: nil).each_batch do |batch|
batch.update_all(snippets_access_level: ENABLED)
end
# We do not need to perform this in a post-deployment migration as the
# ProjectFeature model already enforces a default value for all new rows.
change_column_null :project_features, :snippets_access_level, false
end
def down
change_column_null :project_features, :snippets_access_level, true
change_column_default :project_features, :snippets_access_level, nil
# We can't migrate from 20 -> NULL, as some projects may have explicitly set
# the access level to 20.
end
end
...@@ -1594,7 +1594,7 @@ ActiveRecord::Schema.define(version: 20181031190559) do ...@@ -1594,7 +1594,7 @@ ActiveRecord::Schema.define(version: 20181031190559) do
t.integer "merge_requests_access_level" t.integer "merge_requests_access_level"
t.integer "issues_access_level" t.integer "issues_access_level"
t.integer "wiki_access_level" t.integer "wiki_access_level"
t.integer "snippets_access_level" t.integer "snippets_access_level", default: 20, null: false
t.integer "builds_access_level" t.integer "builds_access_level"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment