Skip to content
Snippets Groups Projects

Use only a single column to store the file path in virtual registries

Merged David Fernandez requested to merge 509421-object-storage-key-unique into master

:file_cabinet: Context

The Maven virtual registry is being implemented and all the work and features are behind a WIP feature flag.

Its logic can be summarized as a pull through cache. A request to a specific file hits the virtual registry and:

  • the file is not in cache. We pull it from the connected (external) upstream. or
  • the file is in cache and we return it from there.

The cache part is powered by the model VirtualRegistries::Packages::Maven::Cache::Entry which uses object storage for storing the actual file contents.

We use a workhorse assisted upload for this part. To keep things simple, the object storage key is stored directly in the table as a column: object_storage_key.

In Maven virtual registry: avoid copy operation du... (#480826 - closed), we applied the "final path" optimization that required a final_file_path column.

Also in Set up partitioning for maven virtual registry ... (!174985 - merged), we noticed that the column that stores the path was not guarded by a unique constraint. Given the existing logic, we could run into a situation where two records in the table could be pointing to the same file on object storage. That would be a pretty sneaky :bug:.

Thus, we are in the situation where:

  • we have two columns, both representing the "path" where to store the file. Depending if object storage is enabled or not, one of two columns is used.
  • we don't have a uniqueness constraint.

That's issue #509421 (closed). This MR aims to:

  • use a single column whether the object storage is enabled or not.
  • introduce a uniqueness constraint.

Again, the maven virtual registry is behind a WIP ~"feature flag", thus, we have some room for heavy refactorings.

:thinking: What does this MR do and why?

  • On the VirtualRegistries::Packages::Maven::Cache::Entry model:
    • ignore the file_final_path.
    • add a uniqueness constraint on object_storage_key.
  • In the cache entry uploader class:
    • override the column for the "file final path" logic to object_storage_key.
  • In the object storage logic, allow clients to provide the key value for the "file final path" logic.
    • and thus avoid running the usual generation.
    • update all the calls to this logic.
  • Update the cache entry object storage key to introduce a random part.
  • Update all the related specs.

:books: References

Please include cross links to any resources that are relevant to this MR. This will give reviewers and future readers helpful context to give an efficient review of the changes introduced.

:race_car: MR acceptance checklist

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

:white_check_mark:

:desktop: Screenshots or screen recordings

None

:gear: How to set up and validate locally

  • Have a root group.
  • Have a PAT ready with the api scope.
  • Enable object storage.
  1. Enable the feature flag : Feature.enable(:virtual_registry_maven).
  2. In a rails console, create the registry and the upstream. Note the registry id.
    r = ::VirtualRegistries::Packages::Maven::Registry.create!(group: <root_group>)
    u = ::VirtualRegistries::Packages::Maven::Upstream.create!(group: <root_group>, url: 'https://repo1.maven.org/maven2')
    VirtualRegistries::Packages::Maven::RegistryUpstream.create!(group: <root_group>, registry: r, upstream: u)

Let's simulate a file request with $ curl:

curl "Private-Token: <PAT>" "http://gdk.test:8000/api/v4/virtual_registries/packages/maven/<r.id>/org/springframework/spring-context/6.1.15/spring-context-6.1.15.pom"

You should get a xml document.

Let's check the cache entry with the rails console:

ce = u.cache_entries.last
#<VirtualRegistries::Packages::Maven::Cache::Entry:0x000000017ea71460
 group_id: 157,
 upstream_id: 36,
 upstream_checked_at: Wed, 29 Jan 2025 09:09:35.455237000 UTC +00:00,
 created_at: Wed, 29 Jan 2025 09:09:35.476074000 UTC +00:00,
 updated_at: Wed, 29 Jan 2025 09:09:35.476074000 UTC +00:00,
 file_store: 2,
 size: 2784,
 status: "default",
 relative_path: "/org/springframework/spring-context/6.1.15/spring-context-6.1.15.pom",
 file: "spring-context-6.1.15.pom",
 object_storage_key: "[FILTERED]",
 upstream_etag: "\"119e499949edb2d335758abfe596429c\"",
 content_type: "[FILTERED]",
 file_md5: "119e499949edb2d335758abfe596429c",
 file_sha1: "2f9638d08b69b15cfabcc41c133d1f796cb827bc">

ce.object_storage_key # let's see the random part after /entry/
=> "e2/9c/e29c9c180c6279b0b02abd6a1801c7c04082cf486ec027aa13515e4f3884bb6b/virtual_registries/packages/maven/32/upstream/36/cache/entry/6b/61/9a9dee2aaf5b8701ddfcacd3168c323ec60cb234123cb9313f1bab3a1c07"

ce.file.read # let's see if we can read the file
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projec...."

Changes are behaving as expected :white_check_mark:

The above scenario can be done again with object storage disabled to verify the changes where the file system powers the file storage.

:floppy_disk: Database review

:arrow_double_up: Migration up

$ r db:migrate:up:main VERSION=20250128153614 && r db:migrate:up:ci VERSION=20250128153614    
DEPRECATION WARNING: Support for Rails versions < 7.1 is deprecated and will be removed from ViewComponent 4.0.0 (ViewComponent v4 will remove support for Rails versions < 7.1 no earlier than April 1, 2025) (called from <main> at /Users/david/projects/gitlab-development-kit/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 79414
main: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: migrating 
main: -- quote_table_name("virtual_registries_packages_maven_cache_entries")
main:    -> 0.0000s
main: -- execute("TRUNCATE TABLE \"virtual_registries_packages_maven_cache_entries\"")
main:    -> 0.0496s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_name_exists?(:virtual_registries_packages_maven_cache_entries, :idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key)
main:    -> 0.0231s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_43aff761b5", :algorithm=>:concurrently})
main:    -> 0.0025s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0004s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_43aff761b5", :algorithm=>:concurrently})
main:    -> 0.0017s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2439930f8c", :algorithm=>:concurrently})
main:    -> 0.0017s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2439930f8c", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_bb41d5837a", :algorithm=>:concurrently})
main:    -> 0.0016s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_bb41d5837a", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_6daa12da84", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_6daa12da84", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_c7fa6f402d", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_c7fa6f402d", :algorithm=>:concurrently})
main:    -> 0.0007s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2442d1fbd9", :algorithm=>:concurrently})
main:    -> 0.0016s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2442d1fbd9", :algorithm=>:concurrently})
main:    -> 0.0007s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_a5d8ab0218", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_a5d8ab0218", :algorithm=>:concurrently})
main:    -> 0.0007s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_cb0e4510aa", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_cb0e4510aa", :algorithm=>:concurrently})
main:    -> 0.0007s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_1fa613e160", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_1fa613e160", :algorithm=>:concurrently})
main:    -> 0.0013s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_27739b516b", :algorithm=>:concurrently})
main:    -> 0.0014s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_27739b516b", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_4efb1529af", :algorithm=>:concurrently})
main:    -> 0.0016s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_4efb1529af", :algorithm=>:concurrently})
main:    -> 0.0009s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0264b93cfb", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0264b93cfb", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_8c8835ac5e", :algorithm=>:concurrently})
main:    -> 0.0015s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_8c8835ac5e", :algorithm=>:concurrently})
main:    -> 0.0009s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_dc7ca9eb1d", :algorithm=>:concurrently})
main:    -> 0.0013s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_dc7ca9eb1d", :algorithm=>:concurrently})
main:    -> 0.0008s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_f586c952e6", :algorithm=>:concurrently})
main:    -> 0.0014s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_f586c952e6", :algorithm=>:concurrently})
main:    -> 0.0009s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0051c4d20c", :algorithm=>:concurrently})
main:    -> 0.0012s
main: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0051c4d20c", :algorithm=>:concurrently})
main:    -> 0.0010s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- add_index(:virtual_registries_packages_maven_cache_entries, [:relative_path, :object_storage_key], {:unique=>true, :name=>:idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key})
main:    -> 0.0017s
main: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: migrated (0.1631s) 

main: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 79414
DEPRECATION WARNING: Support for Rails versions < 7.1 is deprecated and will be removed from ViewComponent 4.0.0 (ViewComponent v4 will remove support for Rails versions < 7.1 no earlier than April 1, 2025) (called from <main> at /Users/david/projects/gitlab-development-kit/gitlab/config/environment.rb:7)
ci: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 79831
ci: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: migrating 
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_name_exists?(:virtual_registries_packages_maven_cache_entries, :idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key)
ci:    -> 0.0312s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_43aff761b5", :algorithm=>:concurrently})
ci:    -> 0.0027s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0003s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_43aff761b5", :algorithm=>:concurrently})
ci:    -> 0.0032s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0004s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2439930f8c", :algorithm=>:concurrently})
ci:    -> 0.0017s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2439930f8c", :algorithm=>:concurrently})
ci:    -> 0.0019s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_bb41d5837a", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_bb41d5837a", :algorithm=>:concurrently})
ci:    -> 0.0012s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_6daa12da84", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_6daa12da84", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_c7fa6f402d", :algorithm=>:concurrently})
ci:    -> 0.0014s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_c7fa6f402d", :algorithm=>:concurrently})
ci:    -> 0.0022s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2442d1fbd9", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_2442d1fbd9", :algorithm=>:concurrently})
ci:    -> 0.0028s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_a5d8ab0218", :algorithm=>:concurrently})
ci:    -> 0.0016s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_a5d8ab0218", :algorithm=>:concurrently})
ci:    -> 0.0014s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_cb0e4510aa", :algorithm=>:concurrently})
ci:    -> 0.0017s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_cb0e4510aa", :algorithm=>:concurrently})
ci:    -> 0.0016s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_1fa613e160", :algorithm=>:concurrently})
ci:    -> 0.0017s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_1fa613e160", :algorithm=>:concurrently})
ci:    -> 0.0011s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_27739b516b", :algorithm=>:concurrently})
ci:    -> 0.0017s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_27739b516b", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_4efb1529af", :algorithm=>:concurrently})
ci:    -> 0.0016s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_4efb1529af", :algorithm=>:concurrently})
ci:    -> 0.0012s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0264b93cfb", :algorithm=>:concurrently})
ci:    -> 0.0017s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0264b93cfb", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_8c8835ac5e", :algorithm=>:concurrently})
ci:    -> 0.0019s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_8c8835ac5e", :algorithm=>:concurrently})
ci:    -> 0.0009s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_dc7ca9eb1d", :algorithm=>:concurrently})
ci:    -> 0.0018s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_dc7ca9eb1d", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_f586c952e6", :algorithm=>:concurrently})
ci:    -> 0.0016s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_f586c952e6", :algorithm=>:concurrently})
ci:    -> 0.0010s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_exists?("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0051c4d20c", :algorithm=>:concurrently})
ci:    -> 0.0015s
ci: -- add_index("gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15", [:relative_path, :object_storage_key], {:unique=>true, :name=>"index_0051c4d20c", :algorithm=>:concurrently})
ci:    -> 0.0011s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- add_index(:virtual_registries_packages_maven_cache_entries, [:relative_path, :object_storage_key], {:unique=>true, :name=>:idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key})
ci:    -> 0.0019s
ci: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: migrated (0.1625s) 

ci: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 79831

:arrow_double_down: Migration down

$ r db:migrate:down:main VERSION=20250128153614 && r db:migrate:down:ci VERSION=20250128153614
DEPRECATION WARNING: Support for Rails versions < 7.1 is deprecated and will be removed from ViewComponent 4.0.0 (ViewComponent v4 will remove support for Rails versions < 7.1 no earlier than April 1, 2025) (called from <main> at /Users/david/projects/gitlab-development-kit/gitlab/config/environment.rb:7)
main: == [advisory_lock_connection] object_id: 132520, pg_backend_pid: 78378
main: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: reverting 
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- index_name_exists?(:virtual_registries_packages_maven_cache_entries, :idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key)
main:    -> 0.0199s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- remove_index(:virtual_registries_packages_maven_cache_entries, {:name=>:idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key})
main:    -> 0.0014s
main: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: reverted (0.0421s) 

main: == [advisory_lock_connection] object_id: 132520, pg_backend_pid: 78378
DEPRECATION WARNING: Support for Rails versions < 7.1 is deprecated and will be removed from ViewComponent 4.0.0 (ViewComponent v4 will remove support for Rails versions < 7.1 no earlier than April 1, 2025) (called from <main> at /Users/david/projects/gitlab-development-kit/gitlab/config/environment.rb:7)
ci: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 78798
ci: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: reverting 
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- index_name_exists?(:virtual_registries_packages_maven_cache_entries, :idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key)
ci:    -> 0.0227s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- remove_index(:virtual_registries_packages_maven_cache_entries, {:name=>:idx_vregs_pkgs_mvn_cache_entries_on_uniq_object_storage_key})
ci:    -> 0.0016s
ci: == 20250128153614 AddObjectStorageKeyUniqueToVRegsPackagesMavenCacheEntries: reverted (0.0660s) 

ci: == [advisory_lock_connection] object_id: 132020, pg_backend_pid: 78798
Edited by David Fernandez

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
Please register or sign in to reply
Loading