diff --git a/app/models/virtual_registries/packages/maven/cached_response.rb b/app/models/virtual_registries/packages/maven/cached_response.rb index 1a3b753ab30a7cc4d12a41e6bd8390c565c58432..131ab34986f8cae7164e5b3dbaf37fd7c2abbab5 100644 --- a/app/models/virtual_registries/packages/maven/cached_response.rb +++ b/app/models/virtual_registries/packages/maven/cached_response.rb @@ -7,9 +7,19 @@ class CachedResponse < ApplicationRecord include FileStoreMounter include Gitlab::SQL::Pattern include ::UpdateNamespaceStatistics + include ShaAttribute + + self.table_name = 'virtual_registries_packages_maven_cache_entries' + + # we're using a composite primary key: upstream_id, relative_path and status + self.primary_key = :upstream_id + query_constraints :upstream_id, :relative_path, :status belongs_to :group - belongs_to :upstream, class_name: 'VirtualRegistries::Packages::Maven::Upstream', inverse_of: :cached_responses + belongs_to :upstream, + class_name: 'VirtualRegistries::Packages::Maven::Upstream', + inverse_of: :cached_responses, + optional: false alias_attribute :namespace, :group @@ -20,21 +30,22 @@ class CachedResponse < ApplicationRecord ignore_column :downloaded_at, remove_with: '17.9', remove_after: '2025-01-23' + sha_attribute :file_sha1 + sha_attribute :file_md5 + validates :group, top_level_group: true, presence: true validates :relative_path, :object_storage_key, :size, :file_sha1, presence: true - validates :relative_path, - :object_storage_key, - :upstream_etag, - :content_type, - length: { maximum: 255 } - validates :file_final_path, length: { maximum: 1024 } + validates :upstream_etag, :content_type, length: { maximum: 255 } + validates :relative_path, :object_storage_key, :file_final_path, 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] }, - if: -> { upstream.present? && default? } + if: :default? validates :file, presence: true mount_file_store_uploader ::VirtualRegistries::CachedResponseUploader @@ -47,6 +58,7 @@ class CachedResponse < ApplicationRecord fuzzy_search(query, [:relative_path], use_minimum_char_limit: false) end scope :for_group, ->(group) { where(group: group) } + scope :order_created_desc, -> { reorder(arel_table['created_at'].desc) } def self.next_pending_destruction pending_destruction.lock('FOR UPDATE SKIP LOCKED').take @@ -85,6 +97,13 @@ def stale? (upstream_checked_at + upstream.cache_validity_hours.hours).past? end + def mark_as_pending_destruction + update_columns( + status: :pending_destruction, + relative_path: "#{relative_path}/deleted/#{SecureRandom.uuid}" + ) + end + private def set_object_storage_key diff --git a/app/models/virtual_registries/packages/maven/upstream.rb b/app/models/virtual_registries/packages/maven/upstream.rb index 69b1b2c89fd0b1d2046415ded5387e29bdc01699..6618dbdb1bf1daaa85574db9a23b14823c2f3475 100644 --- a/app/models/virtual_registries/packages/maven/upstream.rb +++ b/app/models/virtual_registries/packages/maven/upstream.rb @@ -55,6 +55,10 @@ def headers { Authorization: authorization } end + def default_cached_responses + cached_responses.default + end + private def reset_credentials diff --git a/app/services/virtual_registries/packages/maven/handle_file_request_service.rb b/app/services/virtual_registries/packages/maven/handle_file_request_service.rb index 08a22792fd62020cec3216d890aa1209fd2d96d6..d420846f79ccd913c46661ae52bf67b4c14f5296 100644 --- a/app/services/virtual_registries/packages/maven/handle_file_request_service.rb +++ b/app/services/virtual_registries/packages/maven/handle_file_request_service.rb @@ -60,7 +60,7 @@ def execute def cached_response # TODO change this to support multiple upstreams # https://gitlab.com/gitlab-org/gitlab/-/issues/480461 - registry.upstream.cached_responses.default.find_by_relative_path(relative_path) + registry.upstream.default_cached_responses.find_by_relative_path(relative_path) end strong_memoize_attr :cached_response diff --git a/config/gitlab_loose_foreign_keys.yml b/config/gitlab_loose_foreign_keys.yml index 8787af6bb6c2355186f2a2c8d9eaed5e9e12a696..1caade09140ee7d2b5d7563b7f22bca9b1262169 100644 --- a/config/gitlab_loose_foreign_keys.yml +++ b/config/gitlab_loose_foreign_keys.yml @@ -588,6 +588,17 @@ user_details: - table: namespaces column: enterprise_group_id on_delete: async_nullify +virtual_registries_packages_maven_cache_entries: + - table: virtual_registries_packages_maven_upstreams + column: upstream_id + on_delete: update_column_to + target_column: status + target_value: 2 + - table: namespaces + column: group_id + on_delete: update_column_to + target_column: status + target_value: 2 virtual_registries_packages_maven_cached_responses: - table: virtual_registries_packages_maven_upstreams column: upstream_id diff --git a/db/docs/virtual_registries_packages_maven_cache_entries.yml b/db/docs/virtual_registries_packages_maven_cache_entries.yml new file mode 100644 index 0000000000000000000000000000000000000000..18473df4bb0ff28f1c95a74dc22e3eed36c18642 --- /dev/null +++ b/db/docs/virtual_registries_packages_maven_cache_entries.yml @@ -0,0 +1,14 @@ +--- +table_name: virtual_registries_packages_maven_cache_entries +classes: + - VirtualRegistries::Packages::Maven::CachedResponse +feature_categories: + - virtual_registry +description: Cache entry for the Maven virtual packages registry. Mainly the body + of a response of a Maven upstream. Contains references to an object storage file. +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/174985 +milestone: '17.8' +gitlab_schema: gitlab_main_cell +sharding_key: + group_id: namespaces +table_size: small diff --git a/db/migrate/20241224105102_create_virtual_registries_packages_maven_cache_entries.rb b/db/migrate/20241224105102_create_virtual_registries_packages_maven_cache_entries.rb new file mode 100644 index 0000000000000000000000000000000000000000..c5d2248d004a56fa5289087de066cd70243d4316 --- /dev/null +++ b/db/migrate/20241224105102_create_virtual_registries_packages_maven_cache_entries.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +class CreateVirtualRegistriesPackagesMavenCacheEntries < Gitlab::Database::Migration[2.2] + include Gitlab::Database::PartitioningMigrationHelpers::TableManagementHelpers + + milestone '17.8' + + TABLE_NAME = :virtual_registries_packages_maven_cache_entries + + def up + create_table TABLE_NAME, if_not_exists: true, options: 'PARTITION BY HASH (relative_path)', + primary_key: [:upstream_id, :relative_path, :status] do |t| + t.bigint :group_id, null: false + t.bigint :upstream_id, null: false + t.datetime_with_timezone :upstream_checked_at, null: false, default: -> { 'NOW()' } + t.timestamps_with_timezone null: false + t.integer :file_store, null: false, default: 1 + t.integer :size, null: false + t.integer :status, null: false, default: 0, limit: 2 + t.text :relative_path, null: false, limit: 1024 + t.text :file, null: false, limit: 1024 + t.text :object_storage_key, null: false, limit: 1024 + t.text :upstream_etag, limit: 255 + t.text :content_type, limit: 255, null: false, default: 'application/octet-stream' + t.text :file_final_path, limit: 1024 + t.binary :file_md5 + t.binary :file_sha1, null: false + + # for text search on relative path + t.index :relative_path, + using: :gin, + opclass: :gin_trgm_ops, + name: :idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram + + # index on sharding key + t.index %i[group_id status], name: :idx_vreg_pkgs_maven_cache_entries_on_group_id_status + + # for cleanup jobs + t.index [:upstream_id, :relative_path], + name: :idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath, + where: 'status = 2' # status: :pending_destruction + + # for ordered pagination + t.index [:upstream_id, :created_at], + name: :idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at, + where: 'status = 0' # status: :default + end + + create_hash_partitions(TABLE_NAME, 16) + end + + def down + drop_table TABLE_NAME + end +end diff --git a/db/migrate/20250110090206_add_check_constraints_to_virtual_registries_packages_maven_cache_entries.rb b/db/migrate/20250110090206_add_check_constraints_to_virtual_registries_packages_maven_cache_entries.rb new file mode 100644 index 0000000000000000000000000000000000000000..3a7911699f6e99e0d23674535e7b2ceec21c2585 --- /dev/null +++ b/db/migrate/20250110090206_add_check_constraints_to_virtual_registries_packages_maven_cache_entries.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +class AddCheckConstraintsToVirtualRegistriesPackagesMavenCacheEntries < Gitlab::Database::Migration[2.2] + milestone '17.8' + disable_ddl_transaction! + + TABLE_NAME = :virtual_registries_packages_maven_cache_entries + + def up + constraint = check_constraint_name(TABLE_NAME.to_s, 'file_md5', 'max_length') + add_check_constraint(TABLE_NAME, 'file_md5 IS NULL OR octet_length(file_md5) = 16', constraint) + + constraint = check_constraint_name(TABLE_NAME.to_s, 'file_sha1', 'max_length') + add_check_constraint(TABLE_NAME, 'octet_length(file_sha1) = 20', constraint) + end + + def down + constraint = check_constraint_name(TABLE_NAME.to_s, 'file_md5', 'max_length') + remove_check_constraint(TABLE_NAME, constraint) + + constraint = check_constraint_name(TABLE_NAME.to_s, 'file_sha1', 'max_length') + remove_check_constraint(TABLE_NAME, constraint) + end +end diff --git a/db/schema_migrations/20241224105102 b/db/schema_migrations/20241224105102 new file mode 100644 index 0000000000000000000000000000000000000000..b1bf33ff989a122fa070f410b1d6ca69a6a365ba --- /dev/null +++ b/db/schema_migrations/20241224105102 @@ -0,0 +1 @@ +c113f28c36ba46cc7d7abd6b2d309e6e7e07393a0e6287c80ba06774bbf64ead \ No newline at end of file diff --git a/db/schema_migrations/20250110090206 b/db/schema_migrations/20250110090206 new file mode 100644 index 0000000000000000000000000000000000000000..7c472716b3ae1e31860e6ab3d1ca178223a08baf --- /dev/null +++ b/db/schema_migrations/20250110090206 @@ -0,0 +1 @@ +e4465f563d1f69938fe522d71db09d17ea79cf8ff3c964ceaeb5108455d81e52 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 28c484036c60be4f81729291ef3fca47d15c591b..4ab2dc95873cc00fdfed495d83b1819f95b18de7 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -5934,6 +5934,466 @@ CREATE TABLE gitlab_partitions_static.namespace_descendants_31 ( calculated_at timestamp with time zone ); +CREATE TABLE virtual_registries_packages_maven_cache_entries ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +) +PARTITION BY HASH (relative_path); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + +CREATE TABLE gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 ( + group_id bigint NOT NULL, + upstream_id bigint NOT NULL, + upstream_checked_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone NOT NULL, + updated_at timestamp with time zone NOT NULL, + file_store integer DEFAULT 1 NOT NULL, + size integer NOT NULL, + status smallint DEFAULT 0 NOT NULL, + relative_path text NOT NULL, + file text NOT NULL, + object_storage_key text NOT NULL, + upstream_etag text, + content_type text DEFAULT 'application/octet-stream'::text NOT NULL, + file_final_path text, + file_md5 bytea, + file_sha1 bytea NOT NULL, + CONSTRAINT check_215f531366 CHECK ((char_length(content_type) <= 255)), + CONSTRAINT check_2a52b4e0fc CHECK ((char_length(file) <= 1024)), + CONSTRAINT check_36391449ea CHECK ((char_length(object_storage_key) <= 1024)), + CONSTRAINT check_45d3174f8a CHECK ((char_length(relative_path) <= 1024)), + CONSTRAINT check_c9d6e475d9 CHECK ((char_length(file_final_path) <= 1024)), + CONSTRAINT check_cc222855d6 CHECK (((file_md5 IS NULL) OR (octet_length(file_md5) = 16))), + CONSTRAINT check_f2ea43b900 CHECK ((octet_length(file_sha1) = 20)), + CONSTRAINT check_fd9fc90696 CHECK ((char_length(upstream_etag) <= 255)) +); + CREATE TABLE abuse_events ( id bigint NOT NULL, user_id bigint, @@ -23424,6 +23884,38 @@ ALTER TABLE ONLY namespace_descendants ATTACH PARTITION gitlab_partitions_static ALTER TABLE ONLY namespace_descendants ATTACH PARTITION gitlab_partitions_static.namespace_descendants_31 FOR VALUES WITH (modulus 32, remainder 31); +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 FOR VALUES WITH (modulus 16, remainder 0); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 FOR VALUES WITH (modulus 16, remainder 1); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 FOR VALUES WITH (modulus 16, remainder 2); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 FOR VALUES WITH (modulus 16, remainder 3); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 FOR VALUES WITH (modulus 16, remainder 4); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 FOR VALUES WITH (modulus 16, remainder 5); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 FOR VALUES WITH (modulus 16, remainder 6); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 FOR VALUES WITH (modulus 16, remainder 7); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 FOR VALUES WITH (modulus 16, remainder 8); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 FOR VALUES WITH (modulus 16, remainder 9); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 FOR VALUES WITH (modulus 16, remainder 10); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 FOR VALUES WITH (modulus 16, remainder 11); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 FOR VALUES WITH (modulus 16, remainder 12); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 FOR VALUES WITH (modulus 16, remainder 13); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 FOR VALUES WITH (modulus 16, remainder 14); + +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 FOR VALUES WITH (modulus 16, remainder 15); + ALTER TABLE ONLY p_ci_builds ATTACH PARTITION ci_builds FOR VALUES IN ('100'); ALTER TABLE ONLY p_ci_builds_metadata ATTACH PARTITION ci_builds_metadata FOR VALUES IN ('100'); @@ -25276,6 +25768,57 @@ ALTER TABLE ONLY gitlab_partitions_static.namespace_descendants_30 ALTER TABLE ONLY gitlab_partitions_static.namespace_descendants_31 ADD CONSTRAINT namespace_descendants_31_pkey PRIMARY KEY (namespace_id); +ALTER TABLE ONLY virtual_registries_packages_maven_cache_entries + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_00_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_01_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_02_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_03_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_04_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_05_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_06_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_07_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_08_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_09_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_10_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_11_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_12_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_13_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_14_pkey PRIMARY KEY (upstream_id, relative_path, status); + +ALTER TABLE ONLY gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 + ADD CONSTRAINT virtual_registries_packages_maven_cache_entries_15_pkey PRIMARY KEY (upstream_id, relative_path, status); + ALTER TABLE ONLY abuse_events ADD CONSTRAINT abuse_events_pkey PRIMARY KEY (id); @@ -28846,6 +29389,142 @@ CREATE INDEX namespace_descendants_30_namespace_id_idx ON gitlab_partitions_stat CREATE INDEX namespace_descendants_31_namespace_id_idx ON gitlab_partitions_static.namespace_descendants_31 USING btree (namespace_id) WHERE (outdated_at IS NOT NULL); +CREATE INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ON ONLY virtual_registries_packages_maven_cache_entries USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx10 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx11 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx12 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx13 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx14 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mav_upstream_id_relative_path_idx15 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx1 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx2 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx3 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx4 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx5 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx6 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx7 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx8 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX virtual_registries_packages_mave_upstream_id_relative_path_idx9 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 USING btree (upstream_id, relative_path) WHERE (status = 2); + +CREATE INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ON ONLY virtual_registries_packages_maven_cache_entries USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx10 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx11 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx12 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx13 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx14 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven__upstream_id_created_at_idx15 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx1 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx2 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx3 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx4 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx5 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx6 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx7 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx8 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_c_upstream_id_created_at_idx9 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX virtual_registries_packages_maven_ca_upstream_id_created_at_idx ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 USING btree (upstream_id, created_at) WHERE (status = 0); + +CREATE INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ON ONLY virtual_registries_packages_maven_cache_entries USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx10 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx11 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx12 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx13 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx14 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_e_group_id_status_idx15 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx1 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx2 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx3 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx4 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx5 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx6 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx7 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx8 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_en_group_id_status_idx9 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 USING btree (group_id, status); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_group_id_status_idx ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 USING btree (group_id, status); + +CREATE INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ON ONLY virtual_registries_packages_maven_cache_entries USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx10 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx11 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx12 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx13 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx14 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_ent_relative_path_idx15 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx1 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx2 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx3 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx4 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx5 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx6 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx7 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx8 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entr_relative_path_idx9 ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_cache_entri_relative_path_idx ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 USING gin (relative_path gin_trgm_ops); + +CREATE INDEX virtual_registries_packages_maven_upstream_id_relative_path_idx ON gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00 USING btree (upstream_id, relative_path) WHERE (status = 2); + CREATE INDEX analytics_index_audit_events_part_on_created_at_and_author_id ON ONLY audit_events USING btree (created_at, author_id); CREATE INDEX analytics_index_events_on_created_at_and_author_id ON events USING btree (created_at, author_id); @@ -35584,6 +36263,166 @@ ALTER INDEX index_on_namespace_descendants_outdated ATTACH PARTITION gitlab_part ALTER INDEX namespace_descendants_pkey ATTACH PARTITION gitlab_partitions_static.namespace_descendants_31_pkey; +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx10; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx11; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx12; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx13; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx14; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mav_upstream_id_relative_path_idx15; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx1; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx2; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx3; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx4; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx5; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx6; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx7; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx8; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_mave_upstream_id_relative_path_idx9; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx10; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx11; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx12; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx13; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx14; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven__upstream_id_created_at_idx15; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx1; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx2; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx3; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx4; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx5; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx6; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx7; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx8; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_c_upstream_id_created_at_idx9; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_created_at ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_ca_upstream_id_created_at_idx; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx10; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx11; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx12; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx13; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx14; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_e_group_id_status_idx15; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx1; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx2; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx3; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx4; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx5; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx6; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx7; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx8; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_en_group_id_status_idx9; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_group_id_status ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_group_id_status_idx; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx10; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx11; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx12; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx13; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx14; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_ent_relative_path_idx15; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx1; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx2; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx3; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx4; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx5; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx6; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx7; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx8; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entr_relative_path_idx9; + +ALTER INDEX idx_vreg_pkgs_maven_cache_entries_on_relative_path_trigram ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entri_relative_path_idx; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_00_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_01_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_02_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_03_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_04_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_05_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_06_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_07_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_08_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_09_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_10_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_11_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_12_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_13_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_14_pkey; + +ALTER INDEX virtual_registries_packages_maven_cache_entries_pkey ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_cache_entries_15_pkey; + +ALTER INDEX idx_vregs_pkgs_mvn_cache_entries_on_pending_upt_id_relpath ATTACH PARTITION gitlab_partitions_static.virtual_registries_packages_maven_upstream_id_relative_path_idx; + ALTER INDEX p_ci_builds_status_created_at_project_id_idx ATTACH PARTITION ci_builds_gitlab_monitor_metrics; ALTER INDEX p_ci_builds_metadata_pkey ATTACH PARTITION ci_builds_metadata_pkey; diff --git a/lib/api/virtual_registries/packages/maven/cached_responses.rb b/lib/api/virtual_registries/packages/maven/cached_responses.rb index f6215a74e2a4e3496ad342b7024af3244174c055..0727f369daded7adec7e4f4f51e7ca52e1709428 100644 --- a/lib/api/virtual_registries/packages/maven/cached_responses.rb +++ b/lib/api/virtual_registries/packages/maven/cached_responses.rb @@ -30,7 +30,7 @@ def upstream strong_memoize_attr :upstream def cached_responses - upstream.cached_responses.default.search_by_relative_path(params[:search]) + upstream.default_cached_responses.order_created_desc.search_by_relative_path(params[:search]) end def cached_response @@ -108,7 +108,7 @@ def cached_response authorize! :destroy_virtual_registry, cached_response.upstream destroy_conditionally!(cached_response) do |cached_response| - render_validation_error!(cached_response) unless cached_response.update(upstream: nil) + render_validation_error!(cached_response) unless cached_response.mark_as_pending_destruction end end end diff --git a/spec/factories/virtual_registries/packages/maven/cached_responses.rb b/spec/factories/virtual_registries/packages/maven/cached_responses.rb index 5dd465165f9af7d3391b6bd14cb5ab13cc237a3c..59315e89899279e3938af709728384977cccaf93 100644 --- a/spec/factories/virtual_registries/packages/maven/cached_responses.rb +++ b/spec/factories/virtual_registries/packages/maven/cached_responses.rb @@ -10,8 +10,8 @@ upstream_etag { OpenSSL::Digest.hexdigest('SHA256', 'test') } content_type { 'text/plain' } file_final_path { '5f/9c/5f9c/@final/c7/4c/240c' } - file_md5 { '54ce07f4124259b2ea58548e9d620004' } - file_sha1 { 'bbde7c9fb6d74f9a2393bb36b0d4ac7e72c227ee' } + file_md5 { 'd8e8fca2dc0f896fd7cb4cb0031ba249' } + file_sha1 { '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83' } status { :default } transient do diff --git a/spec/models/virtual_registries/packages/maven/cached_response_spec.rb b/spec/models/virtual_registries/packages/maven/cached_response_spec.rb index 60a73822d51f1a53ef9714ad8689f7809e25dd73..b4ae632128a5b68df782450801e4096f0fc05c4a 100644 --- a/spec/models/virtual_registries/packages/maven/cached_response_spec.rb +++ b/spec/models/virtual_registries/packages/maven/cached_response_spec.rb @@ -18,10 +18,16 @@ it { is_expected.to validate_presence_of(attr) } end - %i[relative_path upstream_etag content_type].each do |attr| + %i[upstream_etag content_type].each do |attr| it { is_expected.to validate_length_of(attr).is_at_most(255) } end - it { is_expected.to validate_length_of(:file_final_path).is_at_most(1024) } + + %i[relative_path object_storage_key file_final_path].each do |attr| + 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 before do @@ -30,20 +36,6 @@ it { is_expected.to validate_uniqueness_of(:relative_path).scoped_to(:upstream_id, :status) } - context 'when upstream_id is nil' do - let(:new_cached_response) { build(:virtual_registries_packages_maven_cached_response) } - - before do - cached_response.update!(upstream_id: nil) - new_cached_response.upstream = nil - end - - it 'does not validate uniqueness of relative_path' do - new_cached_response.validate - expect(new_cached_response.errors.messages_for(:relative_path)).not_to include 'has already been taken' - end - end - context 'with a similar cached response in a different status' do let!(:cached_response_in_error) do create( @@ -77,6 +69,7 @@ it 'belongs to an upstream' do is_expected.to belong_to(:upstream) .class_name('VirtualRegistries::Packages::Maven::Upstream') + .required .inverse_of(:cached_responses) end end @@ -116,12 +109,12 @@ end it 'can not be too large' do - cached_response.object_storage_key = 'a' * 256 + cached_response.object_storage_key = 'a' * 1025 cached_response.relative_path = nil expect(cached_response).to be_invalid expect(cached_response.errors.full_messages) - .to include('Object storage key is too long (maximum is 255 characters)') + .to include('Object storage key is too long (maximum is 1024 characters)') end it 'is set before saving' do @@ -186,7 +179,7 @@ upstream: upstream, group_id: upstream.group_id, relative_path: '/test', - updates: { file: file, size: size, file_sha1: 'test' } + updates: { file: file, size: size, file_sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f95' } ) end end @@ -274,10 +267,45 @@ end end + describe '#mark_as_pending_destruction' do + let_it_be_with_refind(:cached_response) { create(:virtual_registries_packages_maven_cached_response, :default) } + + subject(:execute) { cached_response.mark_as_pending_destruction } + + shared_examples 'updating the status and relative_path properly' do + it 'updates the status and relative_path' do + previous_path = cached_response.relative_path + + expect { execute }.to change { cached_response.status }.from('default').to('pending_destruction') + .and not_change { cached_response.object_storage_key } + + expect(cached_response.relative_path).to start_with(previous_path) + expect(cached_response.relative_path).to include('/deleted/') + end + end + + it_behaves_like 'updating the status and relative_path properly' + + context 'with an existing pending destruction record with same relative_path and upstream_id' do + let_it_be(:already_pending_destruction) do + create( + :virtual_registries_packages_maven_cached_response, + :pending_destruction, + upstream: cached_response.upstream, + relative_path: cached_response.relative_path + ) + end + + it_behaves_like 'updating the status and relative_path properly' + end + end + context 'with loose foreign key on virtual_registries_packages_maven_cached_responses.upstream_id' do it_behaves_like 'update by a loose foreign key' do let_it_be(:parent) { create(:virtual_registries_packages_maven_upstream) } let_it_be(:model) { create(:virtual_registries_packages_maven_cached_response, upstream: parent) } + + let(:find_model) { model.reload } end end @@ -285,6 +313,8 @@ it_behaves_like 'update by a loose foreign key' do let_it_be(:parent) { create(:group) } let_it_be(:model) { create(:virtual_registries_packages_maven_cached_response, group: parent) } + + let(:find_model) { model.reload } end end diff --git a/spec/models/virtual_registries/packages/maven/upstream_spec.rb b/spec/models/virtual_registries/packages/maven/upstream_spec.rb index 865bff6724af3d9dbcff17b4aa4c78fbcde1dc44..5b89a31785738d16bd35943700cb723d53e2f848 100644 --- a/spec/models/virtual_registries/packages/maven/upstream_spec.rb +++ b/spec/models/virtual_registries/packages/maven/upstream_spec.rb @@ -231,4 +231,20 @@ it { is_expected.not_to include('username', 'password') } end + + describe '#default_cached_responses' do + let_it_be(:upstream) { create(:virtual_registries_packages_maven_upstream) } + + let_it_be(:default_cached_response) do + create(:virtual_registries_packages_maven_cached_response, upstream: upstream) + end + + let_it_be(:pending_destruction_cached_response) do + create(:virtual_registries_packages_maven_cached_response, :pending_destruction, upstream: upstream) + end + + subject { upstream.default_cached_responses } + + it { is_expected.to contain_exactly(default_cached_response) } + end end diff --git a/spec/requests/api/virtual_registries/packages/maven/cached_responses_spec.rb b/spec/requests/api/virtual_registries/packages/maven/cached_responses_spec.rb index fdc5a963b99c3d3f143a1aebfa1757b065b001e3..e668f6ab8ad22921fc99a6756b4588d71f776773 100644 --- a/spec/requests/api/virtual_registries/packages/maven/cached_responses_spec.rb +++ b/spec/requests/api/virtual_registries/packages/maven/cached_responses_spec.rb @@ -115,21 +115,11 @@ let(:id) { Base64.urlsafe_encode64("#{upstream.id} #{cached_response.relative_path}") } let(:url) { "/virtual_registries/packages/maven/cached_responses/#{id}" } - let_it_be(:processing_cached_response) do - create( - :virtual_registries_packages_maven_cached_response, - :processing, - upstream: upstream, - group: upstream.group, - relative_path: cached_response.relative_path - ) - end - subject(:api_request) { delete api(url), headers: headers } shared_examples 'successful response' do it 'returns a successful response' do - expect { api_request }.to change { upstream.cached_responses.count }.by(-1) + expect { api_request }.to change { cached_response.reload.status }.from('default').to('pending_destruction') expect(response).to have_gitlab_http_status(:no_content) end end @@ -192,7 +182,7 @@ before do allow_next_found_instance_of(cached_response.class) do |instance| errors = ActiveModel::Errors.new(instance).tap { |e| e.add(:cached_response, 'error message') } - allow(instance).to receive_messages(save: false, errors: errors) + allow(instance).to receive_messages(mark_as_pending_destruction: false, errors: errors) end end diff --git a/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb b/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb index 11c0a26fd8d37eb7fc77324a74a4b88cad7a7df2..476f7111b5facba947dd1569a0f2af7338524db5 100644 --- a/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb +++ b/spec/requests/api/virtual_registries/packages/maven/endpoints_spec.rb @@ -217,7 +217,11 @@ api(url), file_key: :file, headers: headers, - params: { file: file_upload, 'file.md5' => 'md5', 'file.sha1' => 'sha1' }, + params: { + file: file_upload, + 'file.md5' => 'd8e8fca2dc0f896fd7cb4cb0031ba249', + 'file.sha1' => '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83' + }, send_rewritten_field: true ) end @@ -228,7 +232,7 @@ expect(response).to have_gitlab_http_status(:ok) expect(response.body).to eq('') - expect(upstream.cached_responses.last).to have_attributes( + expect(upstream.default_cached_responses.search_by_relative_path(path).last).to have_attributes( relative_path: "/#{path}", upstream_etag: nil, upstream_checked_at: Time.zone.now, diff --git a/spec/services/virtual_registries/packages/maven/cached_responses/create_or_update_service_spec.rb b/spec/services/virtual_registries/packages/maven/cached_responses/create_or_update_service_spec.rb index 97a470999435eac49ca8bab5e04f8ab6ed3ce437..db607b3bb00ac35be8c80b980a0b55e9db8b1875 100644 --- a/spec/services/virtual_registries/packages/maven/cached_responses/create_or_update_service_spec.rb +++ b/spec/services/virtual_registries/packages/maven/cached_responses/create_or_update_service_spec.rb @@ -12,7 +12,13 @@ let(:etag) { 'test' } let(:content_type) { 'text/xml' } let(:params) { { path: path, file: file, etag: etag, content_type: content_type } } - let(:file) { UploadedFile.new(Tempfile.new(etag).path, sha1: 'sha1', md5: 'md5') } + let(:file) do + UploadedFile.new( + Tempfile.new(etag).path, + sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83', + md5: 'd8e8fca2dc0f896fd7cb4cb0031ba249' + ) + end let(:service) do described_class.new(upstream: upstream, current_user: user, params: params) @@ -22,7 +28,7 @@ subject(:execute) { service.execute } shared_examples 'returning a service response success response' do - shared_examples 'creating a new cached response' do |with_md5: 'md5'| + shared_examples 'creating a new cached response' do |with_md5: 'd8e8fca2dc0f896fd7cb4cb0031ba249'| it 'returns a success service response', :freeze_time do expect { execute }.to change { upstream.cached_responses.count }.by(1) expect(execute).to be_success @@ -36,7 +42,7 @@ relative_path: "/#{path}", upstream_etag: etag, content_type: content_type, - file_sha1: 'sha1', + file_sha1: '4e1243bd22c66e76c2ba9eddc1f91394e57f9f83', file_md5: with_md5 ) end diff --git a/spec/services/virtual_registries/packages/maven/handle_file_request_service_spec.rb b/spec/services/virtual_registries/packages/maven/handle_file_request_service_spec.rb index fa46dbbe465ea59465796ef6c094ab496f90e4ca..9a24e71c5a32519be837aef4d378a71495776ce5 100644 --- a/spec/services/virtual_registries/packages/maven/handle_file_request_service_spec.rb +++ b/spec/services/virtual_registries/packages/maven/handle_file_request_service_spec.rb @@ -75,7 +75,7 @@ end context 'with a cached response' do - let_it_be_with_reload(:cached_response) do + let_it_be_with_refind(:cached_response) do create(:virtual_registries_packages_maven_cached_response, :upstream_checked, upstream: registry.upstream,