From 784a954a4e2d3be88a23f1db7a4067295f277596 Mon Sep 17 00:00:00 2001 From: Radamanthus Batnag Date: Tue, 18 Nov 2025 22:01:18 +0800 Subject: [PATCH 1/2] Ignore file_md5 column in VirtualRegistries::Container::Cache::Entry This is the first step (Release M) in the process of removing the file_md5 column from virtual_registries_container_cache_entries table. The column will be dropped in the next release (M+1) and the ignore rule will be removed in release M+2. Changelog: changed EE: true MR: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/213182 --- .../models/virtual_registries/container/cache/entry.rb | 10 ++++++++-- .../cache/entries/create_or_update_service.rb | 1 - .../container/handle_file_request_service.rb | 1 - .../virtual_registries/container/cache/entry.rb | 1 - .../virtual_registries/container/cache/entries.rb | 1 - ee/spec/frontend/api/virtual_registries_api_spec.js | 1 - .../virtual_registries/container/cache/entry_spec.rb | 2 +- .../virtual_registries/container/cache/entry_spec.rb | 1 - .../cache/entries/create_or_update_service_spec.rb | 6 ++---- 9 files changed, 11 insertions(+), 13 deletions(-) diff --git a/ee/app/models/virtual_registries/container/cache/entry.rb b/ee/app/models/virtual_registries/container/cache/entry.rb index b77b9471131eeb..4f4e0854f487d1 100644 --- a/ee/app/models/virtual_registries/container/cache/entry.rb +++ b/ee/app/models/virtual_registries/container/cache/entry.rb @@ -12,6 +12,8 @@ class Entry < ApplicationRecord self.primary_key = %i[upstream_id relative_path status] + ignore_column :file_md5, remove_with: '18.9', remove_after: '2026-01-15' + belongs_to :group belongs_to :upstream, class_name: 'VirtualRegistries::Container::Upstream', @@ -24,7 +26,6 @@ class Entry < ApplicationRecord enum :status, default: 0, processing: 1, pending_destruction: 2, error: 3 sha_attribute :file_sha1 - sha_attribute :file_md5 counter_attribute :downloads_count, touch: :downloaded_at @@ -36,7 +37,6 @@ class Entry < ApplicationRecord presence: true validates :upstream_etag, :content_type, length: { maximum: 255 } validates :relative_path, :object_storage_key, length: { maximum: 1024 } - validates :file_md5, length: { is: 32 }, allow_nil: true validates :file_sha1, length: { is: 40 } validates :relative_path, uniqueness: { scope: [:upstream_id, :status] }, @@ -77,6 +77,12 @@ def self.create_or_update_by!(upstream:, group_id:, relative_path:, updates: {}) raise end + # Temporary setter to prevent NoMethodError when old code tries to set file_md5 + # This can be removed in release M+2 when ignore_column is removed + def file_md5=(value) + # Intentionally do nothing - column is ignored + end + def mark_as_pending_destruction update_columns( status: :pending_destruction, diff --git a/ee/app/services/virtual_registries/container/cache/entries/create_or_update_service.rb b/ee/app/services/virtual_registries/container/cache/entries/create_or_update_service.rb index fec565352fcf3e..14d5e747f6ec36 100644 --- a/ee/app/services/virtual_registries/container/cache/entries/create_or_update_service.rb +++ b/ee/app/services/virtual_registries/container/cache/entries/create_or_update_service.rb @@ -29,7 +29,6 @@ def execute file: file, size: file.size, file_sha1: file.sha1, - file_md5: file.md5, content_type: content_type }.compact_blank diff --git a/ee/app/services/virtual_registries/container/handle_file_request_service.rb b/ee/app/services/virtual_registries/container/handle_file_request_service.rb index 35f9c6d6f74d19..820ff79c8393f0 100644 --- a/ee/app/services/virtual_registries/container/handle_file_request_service.rb +++ b/ee/app/services/virtual_registries/container/handle_file_request_service.rb @@ -124,7 +124,6 @@ def download_cache_entry action_params: { file: cache_entry.file, file_sha1: cache_entry.file_sha1, - file_md5: cache_entry.file_md5, content_type: cache_entry.content_type } } diff --git a/ee/lib/api/entities/virtual_registries/container/cache/entry.rb b/ee/lib/api/entities/virtual_registries/container/cache/entry.rb index cbc2cd0495544a..5037c159f57bfc 100644 --- a/ee/lib/api/entities/virtual_registries/container/cache/entry.rb +++ b/ee/lib/api/entities/virtual_registries/container/cache/entry.rb @@ -13,7 +13,6 @@ class Entry < Grape::Entity expose :group_id, :upstream_id, :upstream_checked_at, - :file_md5, :file_sha1, :size, :relative_path, diff --git a/ee/spec/factories/virtual_registries/container/cache/entries.rb b/ee/spec/factories/virtual_registries/container/cache/entries.rb index 6918f2c129b8c9..18eb5b079b5f6d 100644 --- a/ee/spec/factories/virtual_registries/container/cache/entries.rb +++ b/ee/spec/factories/virtual_registries/container/cache/entries.rb @@ -9,7 +9,6 @@ size { 1.kilobyte } upstream_etag { "sha256:#{OpenSSL::Digest.hexdigest('SHA256', relative_path)}" } content_type { 'text/plain' } - file_md5 { 'd8e8fca2dc0f896fd7cb4cb0031ba249' } file_sha1 { '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83' } status { :default } diff --git a/ee/spec/frontend/api/virtual_registries_api_spec.js b/ee/spec/frontend/api/virtual_registries_api_spec.js index fd8992de73aed7..2faeb59a6cd6ef 100644 --- a/ee/spec/frontend/api/virtual_registries_api_spec.js +++ b/ee/spec/frontend/api/virtual_registries_api_spec.js @@ -146,7 +146,6 @@ describe('VirtualRegistriesApi', () => { group_id: 209, upstream_id: 5, upstream_checked_at: '2025-05-19T14:22:23.048Z', - file_md5: null, file_sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83', size: 15, relative_path: '/test/bar', diff --git a/ee/spec/lib/api/entities/virtual_registries/container/cache/entry_spec.rb b/ee/spec/lib/api/entities/virtual_registries/container/cache/entry_spec.rb index 99ed3043af5a10..7a5c28d29a7033 100644 --- a/ee/spec/lib/api/entities/virtual_registries/container/cache/entry_spec.rb +++ b/ee/spec/lib/api/entities/virtual_registries/container/cache/entry_spec.rb @@ -9,6 +9,6 @@ it 'has the expected attributes' do is_expected.to include(:id, :group_id, :upstream_id, :upstream_checked_at, :created_at, :updated_at, - :file_md5, :file_sha1, :size, :relative_path, :upstream_etag, :content_type, :downloads_count, :downloaded_at) + :file_sha1, :size, :relative_path, :upstream_etag, :content_type, :downloads_count, :downloaded_at) end end diff --git a/ee/spec/models/virtual_registries/container/cache/entry_spec.rb b/ee/spec/models/virtual_registries/container/cache/entry_spec.rb index e0932dacd17729..a39d76b07a2325 100644 --- a/ee/spec/models/virtual_registries/container/cache/entry_spec.rb +++ b/ee/spec/models/virtual_registries/container/cache/entry_spec.rb @@ -20,7 +20,6 @@ it { is_expected.to validate_length_of(attr).is_at_most(1024) } end - it { is_expected.to validate_length_of(:file_md5).is_equal_to(32).allow_nil } it { is_expected.to validate_length_of(:file_sha1).is_equal_to(40) } context 'with persisted cached response' do diff --git a/ee/spec/services/virtual_registries/container/cache/entries/create_or_update_service_spec.rb b/ee/spec/services/virtual_registries/container/cache/entries/create_or_update_service_spec.rb index 9d3e30997b1c40..abdfe2649eb503 100644 --- a/ee/spec/services/virtual_registries/container/cache/entries/create_or_update_service_spec.rb +++ b/ee/spec/services/virtual_registries/container/cache/entries/create_or_update_service_spec.rb @@ -15,8 +15,7 @@ let(:file) do UploadedFile.new( Tempfile.new(etag).path, - sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83', - md5: 'd8e8fca2dc0f896fd7cb4cb0031ba249' + sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83' ) end @@ -46,8 +45,7 @@ relative_path: "/#{path}", upstream_etag: etag, content_type: content_type, - file_sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83', - file_md5: 'd8e8fca2dc0f896fd7cb4cb0031ba249' + file_sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83' ) end end -- GitLab From c0bae4fad9523937e2f17a37982bcbd5f998d931 Mon Sep 17 00:00:00 2001 From: Radamanthus Batnag Date: Mon, 24 Nov 2025 11:16:24 +0800 Subject: [PATCH 2/2] Remove file_md5= override --- ee/app/models/virtual_registries/container/cache/entry.rb | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ee/app/models/virtual_registries/container/cache/entry.rb b/ee/app/models/virtual_registries/container/cache/entry.rb index 4f4e0854f487d1..e5e66258a5c768 100644 --- a/ee/app/models/virtual_registries/container/cache/entry.rb +++ b/ee/app/models/virtual_registries/container/cache/entry.rb @@ -77,12 +77,6 @@ def self.create_or_update_by!(upstream:, group_id:, relative_path:, updates: {}) raise end - # Temporary setter to prevent NoMethodError when old code tries to set file_md5 - # This can be removed in release M+2 when ignore_column is removed - def file_md5=(value) - # Intentionally do nothing - column is ignored - end - def mark_as_pending_destruction update_columns( status: :pending_destruction, -- GitLab