Skip to content

Commit 0e08908

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent f0abe9d commit 0e08908

20 files changed

+154
-112
lines changed

GITALY_SERVER_VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
954816989a09915efa2cad385f92e53b25b01675
1+
d4daa7a154ccc86d1b57372e4265bb502c886537

app/models/concerns/cross_database_modification.rb

+2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def gitlab_schema
104104
:gitlab_ci
105105
when 'MainClusterwide::ApplicationRecord'
106106
:gitlab_main_clusterwide
107+
when 'PackageMetadata::ApplicationRecord'
108+
:gitlab_pm
107109
else
108110
Gitlab::Database::GitlabSchema.table_schema(table_name) if table_name
109111
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# frozen_string_literal: true
2+
3+
module PackageMetadata
4+
class ApplicationRecord < ::ApplicationRecord
5+
self.abstract_class = true
6+
7+
def self.table_name_prefix
8+
'pm_'
9+
end
10+
end
11+
end

app/services/merge_requests/refresh_service.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def comment_mr_branch_presence_changed(merge_request)
229229
:source, @push.branch_name, presence)
230230
end
231231

232-
# Add comment about pushing new commits to merge requests and send nofitication emails
232+
# Add comment about pushing new commits to merge requests and send notification emails
233233
#
234234
def notify_about_push(merge_request)
235235
return unless @commits.present?

app/services/work_items/export_csv_service.rb

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
module WorkItems
44
class ExportCsvService < ExportCsv::BaseService
5+
NotAvailableError = StandardError.new('This feature is currently behind a feature flag and it is not available.')
6+
7+
def csv_data
8+
raise NotAvailableError unless Feature.enabled?(:import_export_work_items_csv, resource_parent)
9+
10+
super
11+
end
12+
513
def email(mail_to_user)
614
# TODO - will be implemented as part of https://gitlab.com/gitlab-org/gitlab/-/issues/379082
715
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
name: import_export_work_items_csv
3+
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/111935
4+
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/390330
5+
milestone: '15.9'
6+
type: development
7+
group: group::certify
8+
default_enabled: false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
name: database_async_foreign_key_validation
3+
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/112015
4+
rollout_issue_url:
5+
milestone: '15.9'
6+
type: ops
7+
group: group::database
8+
default_enabled: false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
class PackageMetadataSetDefaultNotNull < Gitlab::Database::Migration[2.1]
4+
def change
5+
change_column_null(:pm_package_versions, :pm_package_id, false)
6+
end
7+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# frozen_string_literal: true
2+
3+
class AddTimestampsToPackageMetadataTables < Gitlab::Database::Migration[2.1]
4+
def up
5+
add_timestamps_with_timezone(:pm_packages, null: false, default: -> { 'NOW()' })
6+
add_timestamps_with_timezone(:pm_package_versions, null: false, default: -> { 'NOW()' })
7+
add_timestamps_with_timezone(:pm_licenses, null: false, default: -> { 'NOW()' })
8+
add_timestamps_with_timezone(:pm_package_version_licenses, null: false, default: -> { 'NOW()' })
9+
end
10+
11+
def down
12+
remove_timestamps(:pm_packages)
13+
remove_timestamps(:pm_package_versions)
14+
remove_timestamps(:pm_licenses)
15+
remove_timestamps(:pm_package_version_licenses)
16+
end
17+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
class AddIdColumnToPackageMetadataJoinTable < Gitlab::Database::Migration[2.1]
4+
disable_ddl_transaction!
5+
6+
COMPOSITE_UNIQUE_INDEX = :i_pm_package_version_licenses_join_ids
7+
8+
def up
9+
drop_constraint(:pm_package_version_licenses, :pm_package_version_licenses_pkey, cascade: true)
10+
add_column(:pm_package_version_licenses, :id, :primary_key)
11+
add_concurrent_index(:pm_package_version_licenses, [:pm_package_version_id, :pm_license_id], unique: true,
12+
name: COMPOSITE_UNIQUE_INDEX)
13+
end
14+
15+
def down
16+
remove_column(:pm_package_version_licenses, :id)
17+
add_primary_key_using_index(:pm_package_version_licenses, :pm_package_version_licenses_pkey, COMPOSITE_UNIQUE_INDEX)
18+
remove_concurrent_index_by_name(:pm_package_version_licenses, COMPOSITE_UNIQUE_INDEX)
19+
end
20+
end

db/schema_migrations/20230113195141

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3e69f6ab127ec01a005ad1de935500fd4bf5528745cec88139aa2917b2a07abf

db/schema_migrations/20230126023444

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
76894f6bf574e61d078781f0dc914f77dc1bf82a6a6786a32adaf8f829261387

db/schema_migrations/20230127155217

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
11645dc1986919fcc78d16b0a33033b95aee086b21620c7628e6bd7ec35cd9e5

db/structure.sql

+25-3
Original file line numberDiff line numberDiff line change
@@ -19872,6 +19872,8 @@ CREATE TABLE pm_checkpoints (
1987219872
CREATE TABLE pm_licenses (
1987319873
id bigint NOT NULL,
1987419874
spdx_identifier text NOT NULL,
19875+
created_at timestamp with time zone DEFAULT now() NOT NULL,
19876+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
1987519877
CONSTRAINT check_c1eb81d1ba CHECK ((char_length(spdx_identifier) <= 50))
1987619878
);
1987719879

@@ -19886,13 +19888,27 @@ ALTER SEQUENCE pm_licenses_id_seq OWNED BY pm_licenses.id;
1988619888

1988719889
CREATE TABLE pm_package_version_licenses (
1988819890
pm_package_version_id bigint NOT NULL,
19889-
pm_license_id bigint NOT NULL
19891+
pm_license_id bigint NOT NULL,
19892+
created_at timestamp with time zone DEFAULT now() NOT NULL,
19893+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
19894+
id bigint NOT NULL
1989019895
);
1989119896

19897+
CREATE SEQUENCE pm_package_version_licenses_id_seq
19898+
START WITH 1
19899+
INCREMENT BY 1
19900+
NO MINVALUE
19901+
NO MAXVALUE
19902+
CACHE 1;
19903+
19904+
ALTER SEQUENCE pm_package_version_licenses_id_seq OWNED BY pm_package_version_licenses.id;
19905+
1989219906
CREATE TABLE pm_package_versions (
1989319907
id bigint NOT NULL,
19894-
pm_package_id bigint,
19908+
pm_package_id bigint NOT NULL,
1989519909
version text NOT NULL,
19910+
created_at timestamp with time zone DEFAULT now() NOT NULL,
19911+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
1989619912
CONSTRAINT check_2d8a88cfcc CHECK ((char_length(version) <= 255))
1989719913
);
1989819914

@@ -19909,6 +19925,8 @@ CREATE TABLE pm_packages (
1990919925
id bigint NOT NULL,
1991019926
purl_type smallint NOT NULL,
1991119927
name text NOT NULL,
19928+
created_at timestamp with time zone DEFAULT now() NOT NULL,
19929+
updated_at timestamp with time zone DEFAULT now() NOT NULL,
1991219930
CONSTRAINT check_3a3aedb8ba CHECK ((char_length(name) <= 255))
1991319931
);
1991419932

@@ -24880,6 +24898,8 @@ ALTER TABLE ONLY plans ALTER COLUMN id SET DEFAULT nextval('plans_id_seq'::regcl
2488024898

2488124899
ALTER TABLE ONLY pm_licenses ALTER COLUMN id SET DEFAULT nextval('pm_licenses_id_seq'::regclass);
2488224900

24901+
ALTER TABLE ONLY pm_package_version_licenses ALTER COLUMN id SET DEFAULT nextval('pm_package_version_licenses_id_seq'::regclass);
24902+
2488324903
ALTER TABLE ONLY pm_package_versions ALTER COLUMN id SET DEFAULT nextval('pm_package_versions_id_seq'::regclass);
2488424904

2488524905
ALTER TABLE ONLY pm_packages ALTER COLUMN id SET DEFAULT nextval('pm_packages_id_seq'::regclass);
@@ -27115,7 +27135,7 @@ ALTER TABLE ONLY pm_licenses
2711527135
ADD CONSTRAINT pm_licenses_pkey PRIMARY KEY (id);
2711627136

2711727137
ALTER TABLE ONLY pm_package_version_licenses
27118-
ADD CONSTRAINT pm_package_version_licenses_pkey PRIMARY KEY (pm_package_version_id, pm_license_id);
27138+
ADD CONSTRAINT pm_package_version_licenses_pkey PRIMARY KEY (id);
2711927139

2712027140
ALTER TABLE ONLY pm_package_versions
2712127141
ADD CONSTRAINT pm_package_versions_pkey PRIMARY KEY (id);
@@ -28701,6 +28721,8 @@ CREATE INDEX i_dast_scanner_profiles_tags_on_scanner_profiles_id ON dast_scanner
2870128721

2870228722
CREATE UNIQUE INDEX i_pm_licenses_on_spdx_identifier ON pm_licenses USING btree (spdx_identifier);
2870328723

28724+
CREATE UNIQUE INDEX i_pm_package_version_licenses_join_ids ON pm_package_version_licenses USING btree (pm_package_version_id, pm_license_id);
28725+
2870428726
CREATE UNIQUE INDEX i_pm_package_versions_on_package_id_and_version ON pm_package_versions USING btree (pm_package_id, version);
2870528727

2870628728
CREATE UNIQUE INDEX i_pm_packages_purl_type_and_name ON pm_packages USING btree (purl_type, name);

lib/gitlab/database/reindexing.rb

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def self.invoke(database = nil)
2828
# Hack: Before we do actual reindexing work, create async indexes
2929
Gitlab::Database::AsyncIndexes.create_pending_indexes! if Feature.enabled?(:database_async_index_creation, type: :ops)
3030
Gitlab::Database::AsyncIndexes.drop_pending_indexes!
31+
Gitlab::Database::AsyncForeignKeys.validate_pending_entries! if Feature.enabled?(:database_async_foreign_key_validation, type: :ops)
3132

3233
automatic_reindexing
3334
end

qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb

-103
This file was deleted.

spec/features/profiles/keys_spec.rb

+5-4
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,11 @@ def destroy_key(path, action, confirmation_button)
122122
project.add_developer(user)
123123
end
124124

125-
it 'revoking the SSH key marks commits as unverified',
126-
quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/390905' do
125+
it 'revoking the SSH key marks commits as unverified' do
127126
visit project_commit_path(project, commit)
127+
wait_for_all_requests
128128

129-
find('a.gpg-status-box', text: 'Verified').click
129+
page.find('a.gpg-status-box', text: 'Verified').click
130130

131131
within('.popover') do
132132
expect(page).to have_content("Verified commit")
@@ -136,8 +136,9 @@ def destroy_key(path, action, confirmation_button)
136136
destroy_key(profile_keys_path, 'Revoke', 'Revoke')
137137

138138
visit project_commit_path(project, commit)
139+
wait_for_all_requests
139140

140-
find('a.gpg-status-box', text: 'Unverified').click
141+
page.find('a.gpg-status-box', text: 'Unverified').click
141142

142143
within('.popover') do
143144
expect(page).to have_content("Unverified signature")

spec/lib/gitlab/database/reindexing_spec.rb

+19
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,25 @@
6868
end
6969
end
7070
end
71+
72+
context 'when async FK validation is enabled' do
73+
it 'executes FK validation for each database prior to any reindexing actions' do
74+
expect(Gitlab::Database::AsyncForeignKeys).to receive(:validate_pending_entries!).ordered.exactly(databases_count).times
75+
expect(described_class).to receive(:automatic_reindexing).ordered.exactly(databases_count).times
76+
77+
described_class.invoke
78+
end
79+
end
80+
81+
context 'when async FK validation is disabled' do
82+
it 'does not execute FK validation' do
83+
stub_feature_flags(database_async_foreign_key_validation: false)
84+
85+
expect(Gitlab::Database::AsyncForeignKeys).not_to receive(:validate_pending_entries!)
86+
87+
described_class.invoke
88+
end
89+
end
7190
end
7291

7392
describe '.automatic_reindexing' do

spec/models/concerns/cross_database_modification_spec.rb

+8
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@
2121

2222
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
2323

24+
PackageMetadata::ApplicationRecord.transaction do
25+
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_pm)
26+
27+
Project.first
28+
end
29+
30+
expect(ApplicationRecord.gitlab_transactions_stack).to be_empty
31+
2432
Project.transaction do
2533
expect(ApplicationRecord.gitlab_transactions_stack).to contain_exactly(:gitlab_main)
2634

spec/services/work_items/export_csv_service_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ def csv
1515
CSV.parse(subject.csv_data, headers: true)
1616
end
1717

18+
context 'when import_export_work_items_csv flag is not enabled' do
19+
before do
20+
stub_feature_flags(import_export_work_items_csv: false)
21+
end
22+
23+
it 'renders an error' do
24+
expect { subject.csv_data }.to raise_error(described_class::NotAvailableError)
25+
end
26+
end
27+
1828
it 'renders csv to string' do
1929
expect(subject.csv_data).to be_a String
2030
end

0 commit comments

Comments
 (0)