Class: Gitlab::Styles::Rubocop::Cop::Migration::AddColumnWithDefaultToLargeTable
- Inherits:
-
RuboCop::Cop::Cop
- Object
- RuboCop::Cop::Cop
- Gitlab::Styles::Rubocop::Cop::Migration::AddColumnWithDefaultToLargeTable
- Includes:
- MigrationHelpers
- Defined in:
- lib/gitlab/styles/rubocop/cop/migration/add_column_with_default_to_large_table.rb
Overview
This cop checks for ‘add_column_with_default` on a table that’s been explicitly blacklisted because of its size.
Even though this helper performs the update in batches to avoid downtime, using it with tables with millions of rows still causes a significant delay in the deploy process and is best avoided.
See gitlab.com/gitlab-com/infrastructure/issues/1602 for more information.
Constant Summary collapse
- MSG =
'Using `add_column_with_default` on the `%s` table will take a ' \ 'long time to complete, and should be avoided unless absolutely ' \ 'necessary'.freeze
- LARGE_TABLES =
i[ ci_pipelines ci_builds events issues merge_request_diff_files merge_request_diffs merge_requests namespaces notes projects routes users ].freeze
Instance Method Summary collapse
Methods included from MigrationHelpers
Instance Method Details
#on_send(node) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/gitlab/styles/rubocop/cop/migration/add_column_with_default_to_large_table.rb', line 43 def on_send(node) return unless in_migration?(node) matched = add_column_with_default?(node) return unless matched table = matched.to_a.first return unless LARGE_TABLES.include?(table) add_offense(node, :expression, format(MSG, table)) end |