From 5bfb8d1fad825eec90b0af688c7cd1b352c9056e Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 18 Mar 2020 18:09:35 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- rubocop/cop/migration/add_column.rb | 5 --- rubocop/cop/migration/add_column_with_default.rb | 32 ------------------ rubocop/cop/migration/safer_boolean_column.rb | 6 +--- rubocop/cop/migration/update_large_table.rb | 22 +----------- rubocop/migration_helpers.rb | 43 ++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 63 deletions(-) (limited to 'rubocop') diff --git a/rubocop/cop/migration/add_column.rb b/rubocop/cop/migration/add_column.rb index a25bd843559..0af90fb7fd1 100644 --- a/rubocop/cop/migration/add_column.rb +++ b/rubocop/cop/migration/add_column.rb @@ -8,11 +8,6 @@ module RuboCop class AddColumn < RuboCop::Cop::Cop include MigrationHelpers - WHITELISTED_TABLES = %i[ - application_settings - plan_limits - ].freeze - MSG = '`add_column` with a default value requires downtime, ' \ 'use `add_column_with_default` instead'.freeze diff --git a/rubocop/cop/migration/add_column_with_default.rb b/rubocop/cop/migration/add_column_with_default.rb index 68e53b17f19..383653ef5a5 100644 --- a/rubocop/cop/migration/add_column_with_default.rb +++ b/rubocop/cop/migration/add_column_with_default.rb @@ -10,38 +10,6 @@ module RuboCop class AddColumnWithDefault < RuboCop::Cop::Cop include MigrationHelpers - # Tables >= 10 GB on GitLab.com as of 02/2020 - BLACKLISTED_TABLES = %i[ - audit_events - ci_build_trace_sections - ci_builds - ci_builds_metadata - ci_job_artifacts - ci_pipeline_variables - ci_pipelines - ci_stages - deployments - events - issues - merge_request_diff_commits - merge_request_diff_files - merge_request_diffs - merge_request_metrics - merge_requests - note_diff_files - notes - project_authorizations - projects - push_event_payloads - resource_label_events - sent_notifications - system_note_metadata - taggings - todos - users - web_hook_logs - ].freeze - MSG = '`add_column_with_default` without `allow_null: true` may cause prolonged lock situations and downtime, ' \ 'see https://gitlab.com/gitlab-org/gitlab/issues/38060'.freeze diff --git a/rubocop/cop/migration/safer_boolean_column.rb b/rubocop/cop/migration/safer_boolean_column.rb index fa524efe5be..25aaf42d00e 100644 --- a/rubocop/cop/migration/safer_boolean_column.rb +++ b/rubocop/cop/migration/safer_boolean_column.rb @@ -23,10 +23,6 @@ module RuboCop NULL_OFFENSE = 'Boolean columns on the `%s` table should disallow nulls.'.freeze DEFAULT_AND_NULL_OFFENSE = 'Boolean columns on the `%s` table should have a default and should disallow nulls. You may wish to use `add_column_with_default`.'.freeze - SMALL_TABLES = %i[ - application_settings - ].freeze - def_node_matcher :add_column?, <<~PATTERN (send nil? :add_column $...) PATTERN @@ -41,7 +37,7 @@ module RuboCop table, _, type = matched.to_a.take(3).map(&:children).map(&:first) opts = matched[3] - return unless SMALL_TABLES.include?(table) && type == :boolean + return unless WHITELISTED_TABLES.include?(table) && type == :boolean no_default = no_default?(opts) nulls_allowed = nulls_allowed?(opts) diff --git a/rubocop/cop/migration/update_large_table.rb b/rubocop/cop/migration/update_large_table.rb index 94bba31c249..e44eadbdb92 100644 --- a/rubocop/cop/migration/update_large_table.rb +++ b/rubocop/cop/migration/update_large_table.rb @@ -19,26 +19,6 @@ module RuboCop 'complete, and should be avoided unless absolutely ' \ 'necessary'.freeze - LARGE_TABLES = %i[ - ci_build_trace_sections - ci_builds - ci_job_artifacts - ci_pipelines - ci_stages - events - issues - merge_request_diff_commits - merge_request_diff_files - merge_request_diffs - merge_requests - namespaces - notes - projects - project_ci_cd_settings - routes - users - ].freeze - BATCH_UPDATE_METHODS = %w[ :add_column_with_default :change_column_type_concurrently @@ -59,7 +39,7 @@ module RuboCop update_method = matches.first table = matches.last.to_a.first - return unless LARGE_TABLES.include?(table) + return unless BLACKLISTED_TABLES.include?(table) add_offense(node, location: :expression, message: format(MSG, update_method, table)) end diff --git a/rubocop/migration_helpers.rb b/rubocop/migration_helpers.rb index 767cacaecaf..b5edb502d4c 100644 --- a/rubocop/migration_helpers.rb +++ b/rubocop/migration_helpers.rb @@ -1,6 +1,49 @@ module RuboCop # Module containing helper methods for writing migration cops. module MigrationHelpers + WHITELISTED_TABLES = %i[ + application_settings + plan_limits + ].freeze + + # Blacklisted table due to: + # - size in GB (>= 10 GB on GitLab.com as of 02/2020) + # - number of records + BLACKLISTED_TABLES = %i[ + audit_events + ci_build_trace_sections + ci_builds + ci_builds_metadata + ci_job_artifacts + ci_pipeline_variables + ci_pipelines + ci_stages + deployments + events + issues + merge_request_diff_commits + merge_request_diff_files + merge_request_diffs + merge_request_metrics + merge_requests + namespaces + note_diff_files + notes + project_authorizations + projects + project_ci_cd_settings + push_event_payloads + resource_label_events + routes + sent_notifications + services + system_note_metadata + taggings + todos + users + web_hook_logs + ].freeze + # Returns true if the given node originated from the db/migrate directory. def in_migration?(node) dirname(node).end_with?('db/migrate', 'db/geo/migrate') || in_post_deployment_migration?(node) -- cgit v1.2.3