Add a single feature flag to disable all ddl across the database
What does this MR do and why?
Adds a single ops feature-flag that disables all DDL feature-flags being used across the GitLab database.
Adds disallow_database_ddl_feature_flags
– disabled by default. When it's set to true
, it will disable all other flags.
Feature flags were identified as
- partition_manager_sync_partitions
- execute_batched_migrations_on_schedule
- execute_background_migrations
- database_reindexing
- database_async_index_operations
- database_async_foreign_key_validation
- database_async_index_creation
These flags are manually disabled during PostgreSQL
upgrade: https://ops.gitlab.net/gitlab-com/gl-infra/db-migration/-/issues/58#note_170932
Screenshots or screen recordings
All the flags are enabled in production:
How to set up and validate locally
- Use this snippet
Note: Gitlab::Database::Reindexing.invoke('main')
is quite tricky to test. You should check the queries triggered in the console.
- Test for
db.rake
echo "Feature.enable(:disallow_database_ddl_feature_flags)" | bundle exec rails c
bundle exec rake gitlab:db:enqueue_reindexing_action\[public.projects_pkey\]
bundle exec rake gitlab:db:execute_async_index_operations:main
bundle exec rake gitlab:db:validate_async_constraints:main
You should see the following message for the three tasks:
Note: disallow_database_ddl_feature_flags feature is currently enabled. Disable it to proceed.
Disable with: Feature.disable(:disallow_database_ddl_feature_flags)
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #417161 (closed)