Module: Gitlab::Database::MigrationHelpers::CascadingNamespaceSettings

Includes:
Gitlab::Database::MigrationHelpers
Defined in:
lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb

Constant Summary

Constants included from Gitlab::Database::MigrationHelpers

DEFAULT_TIMESTAMP_COLUMNS, ENFORCE_INITIALIZE_ALL_INT_IDS_FROM_MILESTONE, INTEGER_IDS_YET_TO_INITIALIZED_TO_BIGINT_FILE_PATH, PENDING_INT_IDS_ERROR_MSG, TABLE_INT_IDS_YAML_FILE_COMMENT

Constants included from DynamicModelHelpers

DynamicModelHelpers::BATCH_SIZE

Constants included from Gitlab::Database::Migrations::RedisHelpers

Gitlab::Database::Migrations::RedisHelpers::SCAN_START_CURSOR

Constants included from Gitlab::Database::Migrations::SidekiqHelpers

Gitlab::Database::Migrations::SidekiqHelpers::DEFAULT_MAX_ATTEMPTS, Gitlab::Database::Migrations::SidekiqHelpers::DEFAULT_TIMES_IN_A_ROW

Constants included from Gitlab::Database::Migrations::ConstraintsHelpers

Gitlab::Database::Migrations::ConstraintsHelpers::MAX_IDENTIFIER_NAME_LENGTH

Constants included from Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers

Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::BATCH_CLASS_NAME, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::BATCH_MIN_DELAY, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::BATCH_MIN_VALUE, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::BATCH_SIZE, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::EARLY_FINALIZATION_ERROR, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::ENFORCE_EARLY_FINALIZATION_FROM_VERSION, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::MIGRATION_NOT_FOUND_MESSAGE, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::MINIMUM_PAUSE_MS, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::NonExistentMigrationError, Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers::SUB_BATCH_SIZE

Instance Method Summary collapse

Methods included from Gitlab::Database::MigrationHelpers

#add_concurrent_index, #add_primary_key_using_index, #add_sequence, #add_timestamps_with_timezone, #backfill_conversion_of_integer_to_bigint, #backfill_iids, #change_column_type_concurrently, #check_trigger_permissions!, #cleanup_concurrent_column_rename, #cleanup_concurrent_column_type_change, #cleanup_conversion_of_integer_to_bigint, #column_for, #convert_to_bigint_column, #copy_foreign_keys, #copy_indexes, #create_or_update_plan_limit, #define_batchable_model, #drop_sequence, #each_batch, #each_batch_range, #ensure_backfill_conversion_of_integer_to_bigint_is_finished, #false_value, #foreign_keys_for, #index_exists_by_name?, #index_invalid?, #indexes_for, #initialize_conversion_of_integer_to_bigint, #install_rename_triggers, #install_sharding_key_assignment_trigger, #lock_tables, #remove_column_default, #remove_concurrent_index, #remove_concurrent_index_by_name, #remove_rename_triggers, #remove_sharding_key_assignment_trigger, #remove_timestamps, #rename_column_concurrently, #rename_trigger_name, #replace_sql, #restore_conversion_of_integer_to_bigint, #revert_backfill_conversion_of_integer_to_bigint, #revert_initialize_conversion_of_integer_to_bigint, #swap_primary_key, #table_integer_ids, #true_value, #undo_change_column_type_concurrently, #undo_cleanup_concurrent_column_rename, #undo_cleanup_concurrent_column_type_change, #undo_rename_column_concurrently, #update_column_in_batches

Methods included from PartitionHelpers

#partition?, #table_partitioned?

Methods included from WraparoundVacuumHelpers

#check_if_wraparound_in_progress

Methods included from AsyncConstraints::MigrationHelpers

#prepare_async_check_constraint_validation, #prepare_async_foreign_key_validation, #prepare_partitioned_async_check_constraint_validation, #prepare_partitioned_async_foreign_key_validation, #unprepare_async_check_constraint_validation, #unprepare_async_foreign_key_validation, #unprepare_partitioned_async_check_constraint_validation, #unprepare_partitioned_async_foreign_key_validation

Methods included from AsyncIndexes::MigrationHelpers

#async_index_creation_available?, #prepare_async_index, #prepare_async_index_from_sql, #prepare_async_index_removal, #unprepare_async_index, #unprepare_async_index_by_name

Methods included from RenameTableHelpers

#finalize_table_rename, #rename_table_safely, #undo_finalize_table_rename, #undo_rename_table_safely

Methods included from FeatureFlagMigratorHelpers

#down_migrate_to_jsonb_setting, #down_migrate_to_setting, #up_migrate_to_jsonb_setting, #up_migrate_to_setting

Methods included from DynamicModelHelpers

define_batchable_model, #each_batch, #each_batch_range

Methods included from Gitlab::Database::Migrations::ForeignKeyHelpers

#add_concurrent_foreign_key, #concurrent_foreign_key_name, #foreign_key_exists?, #remove_foreign_key_if_exists, #remove_foreign_key_without_error, #validate_foreign_key

Methods included from Gitlab::Database::Migrations::LockRetriesHelpers

#with_lock_retries

Methods included from Gitlab::Database::Migrations::TimeoutHelpers

#disable_statement_timeout

Methods included from Gitlab::Database::Migrations::RedisHelpers

#queue_redis_migration_job

Methods included from Gitlab::Database::Migrations::SidekiqHelpers

#migrate_across_instance, #migrate_within_instance, #sidekiq_queue_migrate, #sidekiq_remove_jobs

Methods included from Gitlab::Database::Migrations::ExtensionHelpers

#create_extension, #drop_extension

Methods included from Gitlab::Database::Migrations::ConstraintsHelpers

#add_check_constraint, #add_multi_column_not_null_constraint, #add_not_null_constraint, #add_text_limit, #check_constraint_exists?, check_constraint_exists?, #check_constraint_name, #check_not_null_constraint_exists?, #check_text_limit_exists?, #copy_check_constraints, #drop_constraint, #remove_check_constraint, #remove_multi_column_not_null_constraint, #remove_not_null_constraint, #remove_text_limit, #rename_constraint, #switch_constraint_names, #text_limit_name, #validate_check_constraint, #validate_check_constraint_name!, #validate_multi_column_not_null_constraint, #validate_not_null_constraint, #validate_text_limit

Methods included from Gitlab::Database::Migrations::BatchedBackgroundMigrationHelpers

#delete_batched_background_migration, #ensure_batched_background_migration_is_finished, #finalize_batched_background_migration, #gitlab_schema_from_context, #queue_batched_background_migration

Methods included from Gitlab::Database::Migrations::ReestablishedConnectionStack

#with_restored_connection_stack

Instance Method Details

#add_cascading_namespace_setting(setting_name, type, **options) ⇒ Object

Creates the four required columns that constitutes a single cascading namespace settings attribute. This helper is only appropriate if the setting is not already present as a non-cascading attribute.

Creates the setting_name column along with the lock_setting_name column in both namespace_settings and application_settings.

This helper is not reversible and must be defined in conjunction with remove_cascading_namespace_setting in separate up and down directions.

setting_name - The name of the cascading attribute - same as defined

in `NamespaceSetting` with the `cascading_attr` method.

type - The column type for the setting itself (:boolean, :integer, etc.) options - Standard Rails column options hash. Accepts keys such as

`null` and `default`.

null and default options will only be applied to the application_settings column. In most cases, a non-null default value should be specified.



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb', line 27

def add_cascading_namespace_setting(setting_name, type, **options)
  lock_column_name = :"lock_#{setting_name}"

  check_cascading_namespace_setting_consistency(setting_name, lock_column_name)

  namespace_options = options.merge(null: true, default: nil)

  add_column(:namespace_settings, setting_name, type, **namespace_options)
  add_column(:namespace_settings, lock_column_name, :boolean, default: false, null: false)

  add_column(:application_settings, setting_name, type, **options)
  add_column(:application_settings, lock_column_name, :boolean, default: false, null: false)
end

#remove_cascading_namespace_setting(setting_name) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/gitlab/database/migration_helpers/cascading_namespace_settings.rb', line 41

def remove_cascading_namespace_setting(setting_name)
  lock_column_name = :"lock_#{setting_name}"

  remove_column(:namespace_settings, setting_name) if column_exists?(:namespace_settings, setting_name)
  remove_column(:namespace_settings, lock_column_name) if column_exists?(:namespace_settings, lock_column_name)

  remove_column(:application_settings, setting_name) if column_exists?(:application_settings, setting_name)
  remove_column(:application_settings, lock_column_name) if column_exists?(:application_settings, lock_column_name)
end