Create packages_helm_metadata_cache_registry migration

🛠️ What does this MR do and why?

Helm Metadata Cache Geo support is required for GA of the Helm Chart Registry, ensuring that metadata caches are properly replicated and verified across Geo-distributed GitLab instances.

This MR introduces database migrations and schema changes to support Helm Metadata Cache Geo replication and verification.

It creates two new tables:

  • packages_helm_metadata_cache_states
  • packages_helm_metadata_cache_registry

This MR is part of the whole Helm metadata cache Geo support. The work is split into the following MRs:

  1. Database migration - Create necessary tables and schema 👈🏻 This MR
  2. Model changes - Add Geo models, Registry, Replicator, and feature flags
  3. Documentation updates - Update API docs and monitoring metrics
  4. GraphQL API - Add GraphQL mutations/queries for Helm Metadata Cache management
  5. Batch destroy handling - Implement batch destruction logic for Helm Metadata Caches

🗄️ Database migrations

Main: CreatePackagesHelmMetadataCacheStates

⬆️ : Migration up
$ gdk rails db:migrate:up:main VERSION=20251212161435                                                                     1 err | 8s
main: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 25210
main: == 20251212161435 CreatePackagesHelmMetadataCacheStates: migrating ============
main: -- create_table(:packages_helm_metadata_cache_states)
main: -- quote_column_name(:verification_failure)
main:    -> 0.0000s
main:    -> 0.0806s
main: == 20251212161435 CreatePackagesHelmMetadataCacheStates: migrated (0.1247s) ===

main: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 25210
⬇️ Migration down
$ gdk rails db:migrate:down:main VERSION=20251212161435                                                                  1 err | 15s
main: == [advisory_lock_connection] object_id: 132160, pg_backend_pid: 21842
main: == 20251212161435 CreatePackagesHelmMetadataCacheStates: reverting ============
main: -- drop_table(:packages_helm_metadata_cache_states)
main:    -> 0.0358s
main: == 20251212161435 CreatePackagesHelmMetadataCacheStates: reverted (0.0620s) ===

main: == [advisory_lock_connection] object_id: 132160, pg_backend_pid: 21842

Geo: CreatePackagesHelmMetadataCacheRegistry

⬆️ : Migration up
$ gdk rails db:migrate:down:geo VERSION=20251212135348                                                                      ok | 24s
geo: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 27321
geo: == 20251212135348 CreatePackagesHelmMetadataCacheRegistry: reverting ==========
geo: -- drop_table(:packages_helm_metadata_cache_registry, {:id=>:bigserial, :force=>:cascade})
geo:    -> 0.0342s
geo: == 20251212135348 CreatePackagesHelmMetadataCacheRegistry: reverted (0.0617s) =

geo: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 27321
⬇️ Migration down
$ gdk rails db:migrate:up:geo VERSION=20251212135348                                                                        ok | 21s
geo: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 28950
geo: == 20251212135348 CreatePackagesHelmMetadataCacheRegistry: migrating ==========
geo: -- create_table(:packages_helm_metadata_cache_registry, {:id=>:bigserial, :force=>:cascade})
geo: -- quote_column_name(:verification_failure)
geo:    -> 0.0000s
geo: -- quote_column_name(:last_sync_failure)
geo:    -> 0.0000s
geo:    -> 0.0579s
geo: == 20251212135348 CreatePackagesHelmMetadataCacheRegistry: migrated (0.0822s) =

geo: == [advisory_lock_connection] object_id: 132180, pg_backend_pid: 28950

References

Screenshots or screen recordings

N/A

How to set up and validate locally

  1. Switch to this branch 582314-helm-metadata-cache-db-migration
  2. Run migration separately
    gdk rails db:migrate:up:main VERSION=20251212161435
    gdk rails db:migrate:up:geo VERSION=20251212135348

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #582314 (closed)

Merge request reports

Loading