Skip to content

Move database partitioning code from initializers to module for reusing

Lin Jen-Shin requested to merge initialize-sync_partitions into master

What does this MR do and why?

Move database partitioning code from initializers to module for reusing.

This is trying to resolve the issue in gitlab-jh/gitlab#356 (comment 728224686)

Where we have an additional initialize (jh/config/initializers/postgres_partitioning.rb) will register another partitioned model, however, Partitioning.sync_partitions isn't called again with that in mind.

By extracting this code into a method, we can reuse it there. The merge request is in gitlab-jh/gitlab!172 (merged)

How to set up and validate locally

  • git checkout v14.4.0 or git checkout v14.4.0-ee
  • Note this is destructive to local database: bundle exec rake db:drop db:create db:structure:load db:migrate
  • git checkout main-jh (the branch can be fetched from https://gitlab.com/gitlab-jh/gitlab/tree/main-jh)
  • bundle config set --local gemfile jh/Gemfile
  • bundle install
  • bundle exec rake db:migrate
  • Notice that db/structure.sql is changed.
  • Running this will restore that: rake db:structure:dump because it'll run Gitlab::Database::Partitioning.sync_partitions before dumping the schema.

Here's the JiHu merge request to show that it's fixing the CI job db:check-schema over there: gitlab-jh/gitlab!172 (merged)

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Lin Jen-Shin

Merge request reports