Class: Rubocop::Cop::Migration::UpdateLargeTable
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Rubocop::Cop::Migration::UpdateLargeTable
- Defined in:
- lib/rubocop/cop/migration/update_large_table.rb
Overview
Checks for methods that may lead to batch type issues on a table that’s been explicitly denied because of its size.
Even though though these methods perform functions 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 `%s` on the `%s` table will take a long time to ' \ 'complete, and should be avoided unless absolutely ' \ 'necessary'
Instance Method Summary collapse
Methods included from Gitlab::Styles::Rubocop::MigrationHelpers
Instance Method Details
#batch_update?(node) ⇒ Object
25 26 27 28 29 |
# File 'lib/rubocop/cop/migration/update_large_table.rb', line 25 def_node_matcher :batch_update?, <<~PATTERN (send nil? ${#denied_method?} (sym $...) ...) PATTERN |
#on_send(node) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/rubocop/cop/migration/update_large_table.rb', line 31 def on_send(node) return if denied_tables.empty? || denied_methods.empty? return unless in_migration?(node) matches = batch_update?(node) return unless matches update_method = matches.first table = matches.last.to_a.first return unless denied_tables.include?(table) add_offense(node, message: format(MSG, update_method, table)) end |