From 1ecf8cc9539c6daec37868eeff496a103a6ac9f5 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Mon, 11 Aug 2025 20:10:51 +0400 Subject: [PATCH 01/11] Add organization_id to keys Add organization_id to keys table which stores user SSH keys and deploy keys. This coulmn will be used for sharding Changelog: changed --- .../projects/deploy_keys_controller.rb | 3 ++- .../user_settings/ssh_keys_controller.rb | 4 +++- app/models/key.rb | 1 + db/docs/keys.yml | 5 +++-- ...0250811153651_add_organization_id_to_keys.rb | 17 +++++++++++++++++ db/schema_migrations/20250811153651 | 1 + db/structure.sql | 8 +++++++- spec/factories/keys.rb | 1 + spec/lib/gitlab/database/sharding_key_spec.rb | 3 ++- 9 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20250811153651_add_organization_id_to_keys.rb create mode 100644 db/schema_migrations/20250811153651 diff --git a/app/controllers/projects/deploy_keys_controller.rb b/app/controllers/projects/deploy_keys_controller.rb index b5dd102df64a2b..8918baa041b5fc 100644 --- a/app/controllers/projects/deploy_keys_controller.rb +++ b/app/controllers/projects/deploy_keys_controller.rb @@ -112,7 +112,8 @@ def create_params create_params = params.require(:deploy_key) .permit(:key, :title, :expires_at, deploy_keys_projects_attributes: [:can_push]) create_params.dig(:deploy_keys_projects_attributes, '0')&.merge!(project_id: @project.id) - create_params + + create_params.merge(organization_id: @project.organization_id) end def update_params diff --git a/app/controllers/user_settings/ssh_keys_controller.rb b/app/controllers/user_settings/ssh_keys_controller.rb index a2dbbc49eefdd2..b54d0cc5ad4388 100644 --- a/app/controllers/user_settings/ssh_keys_controller.rb +++ b/app/controllers/user_settings/ssh_keys_controller.rb @@ -16,7 +16,9 @@ def show end def create - @key = Keys::CreateService.new(current_user, key_params.merge(ip_address: request.remote_ip)).execute + @key = Keys::CreateService.new(current_user, + key_params.merge(ip_address: request.remote_ip, + organization: Current.organization)).execute if @key.persisted? redirect_to user_settings_ssh_key_path(@key) diff --git a/app/models/key.rb b/app/models/key.rb index 96220959d0c58c..78c4518b46c331 100644 --- a/app/models/key.rb +++ b/app/models/key.rb @@ -12,6 +12,7 @@ class Key < ApplicationRecord sha256_attribute :fingerprint_sha256 belongs_to :user + belongs_to :organization, class_name: 'Organizations::Organization' has_many :ssh_signatures, class_name: 'CommitSignatures::SshSignature' diff --git a/db/docs/keys.yml b/db/docs/keys.yml index 51e2e53b67a308..0bbbb7cd4e13bb 100644 --- a/db/docs/keys.yml +++ b/db/docs/keys.yml @@ -10,7 +10,8 @@ feature_categories: - continuous_delivery description: SSH keys used by users or for deployments. introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/9ba1224867665844b117fa037e1465bb706b3685 -milestone: "<6.0" +milestone: '<6.0' gitlab_schema: gitlab_main_org table_size: medium -sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/553463 +sharding_key: + organization_id: organizations diff --git a/db/migrate/20250811153651_add_organization_id_to_keys.rb b/db/migrate/20250811153651_add_organization_id_to_keys.rb new file mode 100644 index 00000000000000..9ab94c1ec38d8c --- /dev/null +++ b/db/migrate/20250811153651_add_organization_id_to_keys.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddOrganizationIdToKeys < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + + milestone '18.4' + + def up + add_column :keys, :organization_id, :bigint, default: 1, null: false + add_concurrent_index :keys, :organization_id + add_concurrent_foreign_key :keys, :organizations, column: :organization_id, on_delete: :cascade + end + + def down + remove_column :keys, :organization_id + end +end diff --git a/db/schema_migrations/20250811153651 b/db/schema_migrations/20250811153651 new file mode 100644 index 00000000000000..9ac8f623233260 --- /dev/null +++ b/db/schema_migrations/20250811153651 @@ -0,0 +1 @@ +e4ff7922cc68a89ded534bf0a5d6a98897b8041ba4b2aaf55a9143d0b15b5ebb \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 317be4c70415ea..0b26363a1e5649 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -18201,7 +18201,8 @@ CREATE TABLE keys ( expires_at timestamp with time zone, expiry_notification_delivered_at timestamp with time zone, before_expiry_notification_delivered_at timestamp with time zone, - usage_type smallint DEFAULT 0 NOT NULL + usage_type smallint DEFAULT 0 NOT NULL, + organization_id bigint DEFAULT 1 NOT NULL ); CREATE SEQUENCE keys_id_seq @@ -39220,6 +39221,8 @@ CREATE INDEX index_keys_on_id_and_ldap_key_type ON keys USING btree (id) WHERE ( CREATE INDEX index_keys_on_last_used_at ON keys USING btree (last_used_at DESC NULLS LAST); +CREATE INDEX index_keys_on_organization_id ON keys USING btree (organization_id); + CREATE INDEX index_keys_on_user_id ON keys USING btree (user_id); CREATE UNIQUE INDEX index_kubernetes_namespaces_on_cluster_project_environment_id ON clusters_kubernetes_namespaces USING btree (cluster_id, project_id, environment_id); @@ -46751,6 +46754,9 @@ ALTER TABLE ONLY bulk_import_exports ALTER TABLE ONLY ml_model_versions ADD CONSTRAINT fk_39f8aa0b8a FOREIGN KEY (package_id) REFERENCES packages_packages(id) ON DELETE SET NULL; +ALTER TABLE ONLY keys + ADD CONSTRAINT fk_3a0e3d4776 FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE CASCADE; + ALTER TABLE p_ci_builds ADD CONSTRAINT fk_3a9eaa254d_p FOREIGN KEY (partition_id, stage_id) REFERENCES p_ci_stages(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE; diff --git a/spec/factories/keys.rb b/spec/factories/keys.rb index d407f2f5a5497e..29dd88257fc510 100644 --- a/spec/factories/keys.rb +++ b/spec/factories/keys.rb @@ -3,6 +3,7 @@ FactoryBot.define do factory :key do sequence(:title) { |n| "title #{n}" } + organization { association :common_organization } key do # Larger keys take longer to generate, and since this factory gets called frequently, # let's only create the smallest one we need. diff --git a/spec/lib/gitlab/database/sharding_key_spec.rb b/spec/lib/gitlab/database/sharding_key_spec.rb index 85fa3bd3b698cd..3db855208ef194 100644 --- a/spec/lib/gitlab/database/sharding_key_spec.rb +++ b/spec/lib/gitlab/database/sharding_key_spec.rb @@ -303,7 +303,8 @@ "abuse_report_labels" => "https://gitlab.com/gitlab-org/gitlab/-/issues/553427", "abuse_report_user_mentions" => "https://gitlab.com/gitlab-org/gitlab/-/issues/553434", "abuse_report_events" => "https://gitlab.com/gitlab-org/gitlab/-/issues/553429", - "abuse_events" => "https://gitlab.com/gitlab-org/gitlab/-/issues/553427" + "abuse_events" => "https://gitlab.com/gitlab-org/gitlab/-/issues/553427", + "keys" => "https://gitlab.com/gitlab-org/gitlab/-/issues/569598" } has_lfk = ->(lfks) { lfks.any? { |k| k.options[:column] == 'organization_id' && k.to_table == 'organizations' } } -- GitLab From 2e790afc5a6886d7bab3755c401023daae13c3ef Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 06:39:34 +0530 Subject: [PATCH 02/11] fix yaml syntax --- db/docs/keys.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/docs/keys.yml b/db/docs/keys.yml index 0bbbb7cd4e13bb..4f5801542d58d2 100644 --- a/db/docs/keys.yml +++ b/db/docs/keys.yml @@ -10,8 +10,8 @@ feature_categories: - continuous_delivery description: SSH keys used by users or for deployments. introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/commit/9ba1224867665844b117fa037e1465bb706b3685 -milestone: '<6.0' +milestone: "<6.0" gitlab_schema: gitlab_main_org table_size: medium -sharding_key: +sharding_key: organization_id: organizations -- GitLab From 65bd7a3461b4aa28970b678a7f2d0ddecddaac25 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 14:01:34 +0530 Subject: [PATCH 03/11] Update migration version --- ..._to_keys.rb => 20250911082754_add_organization_id_to_keys.rb} | 0 db/schema_migrations/20250811153651 | 1 - db/schema_migrations/20250911082754 | 1 + 3 files changed, 1 insertion(+), 1 deletion(-) rename db/migrate/{20250811153651_add_organization_id_to_keys.rb => 20250911082754_add_organization_id_to_keys.rb} (100%) delete mode 100644 db/schema_migrations/20250811153651 create mode 100644 db/schema_migrations/20250911082754 diff --git a/db/migrate/20250811153651_add_organization_id_to_keys.rb b/db/migrate/20250911082754_add_organization_id_to_keys.rb similarity index 100% rename from db/migrate/20250811153651_add_organization_id_to_keys.rb rename to db/migrate/20250911082754_add_organization_id_to_keys.rb diff --git a/db/schema_migrations/20250811153651 b/db/schema_migrations/20250811153651 deleted file mode 100644 index 9ac8f623233260..00000000000000 --- a/db/schema_migrations/20250811153651 +++ /dev/null @@ -1 +0,0 @@ -e4ff7922cc68a89ded534bf0a5d6a98897b8041ba4b2aaf55a9143d0b15b5ebb \ No newline at end of file diff --git a/db/schema_migrations/20250911082754 b/db/schema_migrations/20250911082754 new file mode 100644 index 00000000000000..2d44bc67993fc6 --- /dev/null +++ b/db/schema_migrations/20250911082754 @@ -0,0 +1 @@ +bce6acecf5d09ad1d55acabcb906fe3fd48ad51af31a22336fdab1059cbd1aab \ No newline at end of file -- GitLab From 98b76262511e812076b7b6a7b2428a37a50b5bd7 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 15:57:04 +0530 Subject: [PATCH 04/11] Add organization_id to newly created SSH & deploy keys --- spec/controllers/projects/deploy_keys_controller_spec.rb | 7 +++++++ .../user_settings/ssh_keys_controller_spec.rb | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/spec/controllers/projects/deploy_keys_controller_spec.rb b/spec/controllers/projects/deploy_keys_controller_spec.rb index b1021c3e689071..240e090c4101b0 100644 --- a/spec/controllers/projects/deploy_keys_controller_spec.rb +++ b/spec/controllers/projects/deploy_keys_controller_spec.rb @@ -138,6 +138,13 @@ def create_params(title = 'my-key') expect(response).to redirect_to(project_settings_repository_path(project, anchor: 'js-deploy-keys-settings')) end + it 'creates a deploy key with the project organization_id' do + post :create, params: create_params + + created_key = project.deploy_keys.last + expect(created_key.organization_id).to eq(project.organization_id) + end + it 'redirects to project settings with the correct anchor' do post :create, params: create_params diff --git a/spec/controllers/user_settings/ssh_keys_controller_spec.rb b/spec/controllers/user_settings/ssh_keys_controller_spec.rb index 1d8752ff522e44..0a193e2781a368 100644 --- a/spec/controllers/user_settings/ssh_keys_controller_spec.rb +++ b/spec/controllers/user_settings/ssh_keys_controller_spec.rb @@ -4,10 +4,12 @@ RSpec.describe UserSettings::SshKeysController, feature_category: :user_profile do let(:user) { create(:user) } + let(:organization) { create(:organization) } describe 'POST #create' do before do sign_in(user) + allow(Current).to receive(:organization).and_return(organization) end it 'creates a new key' do @@ -24,6 +26,13 @@ expect(key.usage_type).to eq('signing') end + it 'creates a key with the current organization_id' do + post :create, params: { key: build(:key).attributes } + + key = Key.last + expect(key.organization_id).to eq(organization.id) + end + context 'with FIPS mode', :fips_mode do it 'creates a new key without MD5 fingerprint' do expires_at = 3.days.from_now -- GitLab From 0104dbe121900a80b99fb9e49fc9ad17351e2833 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 16:04:39 +0530 Subject: [PATCH 05/11] Use stub helper instead of direct Current mock --- spec/controllers/user_settings/ssh_keys_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/controllers/user_settings/ssh_keys_controller_spec.rb b/spec/controllers/user_settings/ssh_keys_controller_spec.rb index 0a193e2781a368..0ab5791eea5a70 100644 --- a/spec/controllers/user_settings/ssh_keys_controller_spec.rb +++ b/spec/controllers/user_settings/ssh_keys_controller_spec.rb @@ -9,7 +9,7 @@ describe 'POST #create' do before do sign_in(user) - allow(Current).to receive(:organization).and_return(organization) + stub_current_organization(organization) end it 'creates a new key' do -- GitLab From b8fd32c7799d00c9e86f8edc0461a92d4b8562d2 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 18:13:42 +0530 Subject: [PATCH 06/11] Add organization to deploy key and test fixtures --- app/services/deploy_keys/create_service.rb | 2 +- spec/support/helpers/auth/dpop_token_helper.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/deploy_keys/create_service.rb b/app/services/deploy_keys/create_service.rb index 3245e749164cc2..49293b6b29c0ac 100644 --- a/app/services/deploy_keys/create_service.rb +++ b/app/services/deploy_keys/create_service.rb @@ -3,7 +3,7 @@ module DeployKeys class CreateService < Keys::BaseService def execute(project: nil) - DeployKey.create(params.merge(user: user)) + DeployKey.create(params.merge(user: user, organization: user.organization)) end end end diff --git a/spec/support/helpers/auth/dpop_token_helper.rb b/spec/support/helpers/auth/dpop_token_helper.rb index 6065de46ca61de..5209261b0518fd 100644 --- a/spec/support/helpers/auth/dpop_token_helper.rb +++ b/spec/support/helpers/auth/dpop_token_helper.rb @@ -63,7 +63,7 @@ def generate_dpop_proof_for( # rubocop:disable Metrics/ParameterLists -- all par "\ny1Y0tD9WVuVwFMEfkENQzOEJxVHwQpsxBRQ5snustS/HmrF5SIZyeg==" \ "\n-----END RSA PRIVATE KEY-----" - key = user.keys.create!(title: "Sample key #{user.id}", key: ssh_public_key) + key = user.keys.create!(title: "Sample key #{user.id}", key: ssh_public_key, organization: user.organization) fingerprint ||= create_fingerprint(key.key) openssl_private_key = OpenSSL::PKey::RSA.new(ssh_private_key) -- GitLab From 466551cb8952a208627dab2de3b105f4a9d48a90 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 19:34:22 +0530 Subject: [PATCH 07/11] fix keys create service --- app/services/keys/create_service.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/services/keys/create_service.rb b/app/services/keys/create_service.rb index 507537391ed7ea..48f6070ea694c6 100644 --- a/app/services/keys/create_service.rb +++ b/app/services/keys/create_service.rb @@ -9,6 +9,7 @@ def initialize(current_user, params = {}) @params = params @ip_address = @params.delete(:ip_address) @user = params.delete(:user) || current_user + params[:organization] ||= user.organization end def execute -- GitLab From a93b644984cadab6ef53ce2fb8e5247da380a61f Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 11 Sep 2025 20:20:38 +0530 Subject: [PATCH 08/11] fix factory --- spec/factories/keys.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/factories/keys.rb b/spec/factories/keys.rb index 29dd88257fc510..6b33dfa65400ed 100644 --- a/spec/factories/keys.rb +++ b/spec/factories/keys.rb @@ -3,7 +3,7 @@ FactoryBot.define do factory :key do sequence(:title) { |n| "title #{n}" } - organization { association :common_organization } + organization key do # Larger keys take longer to generate, and since this factory gets called frequently, # let's only create the smallest one we need. -- GitLab From f8099c9e7c2e751ff362e0620227a66ce6e055bf Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Fri, 12 Sep 2025 23:19:39 +0530 Subject: [PATCH 09/11] Add organization to deploy key creation --- app/services/deploy_keys/create_service.rb | 3 ++- ee/lib/ee/gitlab/auth/ldap/access.rb | 1 + ee/spec/lib/gitlab/auth/ldap/access_spec.rb | 2 +- lib/api/deploy_keys.rb | 2 +- spec/controllers/projects/deploy_keys_controller_spec.rb | 8 ++++++-- spec/features/projects/deploy_keys_spec.rb | 5 +++-- spec/requests/api/deploy_keys_spec.rb | 8 ++++---- 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/app/services/deploy_keys/create_service.rb b/app/services/deploy_keys/create_service.rb index 49293b6b29c0ac..c9cac07136f9b5 100644 --- a/app/services/deploy_keys/create_service.rb +++ b/app/services/deploy_keys/create_service.rb @@ -3,7 +3,8 @@ module DeployKeys class CreateService < Keys::BaseService def execute(project: nil) - DeployKey.create(params.merge(user: user, organization: user.organization)) + organization = params[:organization] || user.organization + DeployKey.create(params.merge(user:, organization:)) end end end diff --git a/ee/lib/ee/gitlab/auth/ldap/access.rb b/ee/lib/ee/gitlab/auth/ldap/access.rb index 670808eb27be37..58a02a2e0d37c8 100644 --- a/ee/lib/ee/gitlab/auth/ldap/access.rb +++ b/ee/lib/ee/gitlab/auth/ldap/access.rb @@ -46,6 +46,7 @@ def add_new_ssh_keys ::Gitlab::AppLogger.info "#{self.class.name}: adding LDAP SSH key #{key.inspect} to #{user.name} (#{user.id})" new_key = ::LDAPKey.new(title: "LDAP - #{ldap_config.sync_ssh_keys}", key: key) new_key.user = user + new_key.organization = user.organization unless new_key.save ::Gitlab::AppLogger.error "#{self.class.name}: failed to add LDAP SSH key #{key.inspect} to #{user.name} (#{user.id})\n"\ diff --git a/ee/spec/lib/gitlab/auth/ldap/access_spec.rb b/ee/spec/lib/gitlab/auth/ldap/access_spec.rb index ca7f98f0fe8a19..37f85d78664ddd 100644 --- a/ee/spec/lib/gitlab/auth/ldap/access_spec.rb +++ b/ee/spec/lib/gitlab/auth/ldap/access_spec.rb @@ -411,7 +411,7 @@ context 'user has at least one LDAPKey' do before do - user.keys.ldap.create! key: ssh_key, title: 'to be removed' + user.keys.ldap.create! key: ssh_key, title: 'to be removed', organization: user.organization end it 'removes a SSH key if it is no longer in LDAP' do diff --git a/lib/api/deploy_keys.rb b/lib/api/deploy_keys.rb index 29a2014d653356..4033853050c953 100644 --- a/lib/api/deploy_keys.rb +++ b/lib/api/deploy_keys.rb @@ -159,7 +159,7 @@ def find_by_deploy_key(project, key_id) end # Create a new deploy key - deploy_key_attributes = declared_params.except(:can_push).merge(user: current_user) + deploy_key_attributes = declared_params.except(:can_push).merge(user: current_user, organization: current_user.organization) deploy_key_project = add_deploy_keys_project(user_project, deploy_key_attributes: deploy_key_attributes, can_push: !!params[:can_push]) if deploy_key_project.valid? diff --git a/spec/controllers/projects/deploy_keys_controller_spec.rb b/spec/controllers/projects/deploy_keys_controller_spec.rb index 240e090c4101b0..a1398c98afed99 100644 --- a/spec/controllers/projects/deploy_keys_controller_spec.rb +++ b/spec/controllers/projects/deploy_keys_controller_spec.rb @@ -329,6 +329,10 @@ def create_params(title = 'my-key') let(:extra_params) { {} } let(:project) { create(:project) } + before do + stub_current_organization(project.organization) + end + subject do put :update, params: extra_params.reverse_merge( id: deploy_key.id, namespace_id: project.namespace, project_id: project @@ -341,7 +345,7 @@ def deploy_key_params(title, can_push) end context 'public deploy key' do - let(:deploy_key) { create(:deploy_key, public: true) } + let(:deploy_key) { create(:deploy_key, public: true, organization: create(:common_organization)) } let!(:deploy_keys_project) do create(:deploy_keys_project, project: project, deploy_key: deploy_key) end @@ -445,7 +449,7 @@ def deploy_key_params(title, can_push) end context 'private deploy key' do - let_it_be(:deploy_key) { create(:deploy_key) } + let_it_be(:deploy_key) { create(:deploy_key, organization: create(:common_organization)) } let_it_be(:extra_params) { deploy_key_params('updated title', '1') } context 'when attached to one project' do diff --git a/spec/features/projects/deploy_keys_spec.rb b/spec/features/projects/deploy_keys_spec.rb index 219e47e3f0ef03..cc10b654756dc1 100644 --- a/spec/features/projects/deploy_keys_spec.rb +++ b/spec/features/projects/deploy_keys_spec.rb @@ -5,10 +5,11 @@ RSpec.describe 'Project deploy keys', :js, feature_category: :groups_and_projects do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo) } - let_it_be(:deploy_keys_project) { create(:deploy_keys_project, project: project) } - let_it_be(:deploy_key) { deploy_keys_project.deploy_key } + let_it_be(:deploy_key) { create(:deploy_key, organization: user.organization) } + let_it_be(:deploy_keys_project) { create(:deploy_keys_project, project: project, deploy_key: deploy_key) } before do + stub_current_organization(user.organization) project.add_maintainer(user) sign_in(user) end diff --git a/spec/requests/api/deploy_keys_spec.rb b/spec/requests/api/deploy_keys_spec.rb index 45d2d54f0702ab..ef319aca465be4 100644 --- a/spec/requests/api/deploy_keys_spec.rb +++ b/spec/requests/api/deploy_keys_spec.rb @@ -6,9 +6,10 @@ let_it_be(:user) { create(:user) } let_it_be(:maintainer) { create(:user) } let_it_be(:admin) { create(:admin) } - let_it_be(:project) { create(:project, creator_id: user.id) } - let_it_be(:project2) { create(:project, creator_id: user.id) } - let_it_be(:project3) { create(:project, creator_id: user.id) } + let_it_be(:organization) { create(:common_organization) } + let_it_be(:project) { create(:project, creator_id: user.id, organization: organization) } + let_it_be(:project2) { create(:project, creator_id: user.id, organization: organization) } + let_it_be(:project3) { create(:project, creator_id: user.id, organization: organization) } let_it_be(:deploy_key) { create(:deploy_key, public: true) } let_it_be(:deploy_key_private) { create(:deploy_key, public: false) } let_it_be(:path) { '/deploy_keys' } @@ -268,7 +269,6 @@ def perform_request expect do post api(project_path, admin, admin_mode: true), params: key_attrs end.to change { project.deploy_keys.count }.by(1) - new_key = project.deploy_keys.last expect(new_key.key).to eq(key_attrs[:key]) expect(new_key.user).to eq(admin) -- GitLab From 2c1e6d7dbb7f519ca39a8f3c865d6f0767fabdc6 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Tue, 16 Sep 2025 18:44:03 +0530 Subject: [PATCH 10/11] Apply 1 suggestion(s) to 1 file(s) --- db/migrate/20250911082754_add_organization_id_to_keys.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20250911082754_add_organization_id_to_keys.rb b/db/migrate/20250911082754_add_organization_id_to_keys.rb index 9ab94c1ec38d8c..1a21b3281fe268 100644 --- a/db/migrate/20250911082754_add_organization_id_to_keys.rb +++ b/db/migrate/20250911082754_add_organization_id_to_keys.rb @@ -3,7 +3,7 @@ class AddOrganizationIdToKeys < Gitlab::Database::Migration[2.3] disable_ddl_transaction! - milestone '18.4' + milestone '18.5' def up add_column :keys, :organization_id, :bigint, default: 1, null: false -- GitLab From 7f7b05dd13fb930ffb8f6226373a6c3049424b12 Mon Sep 17 00:00:00 2001 From: Aboobacker MK Date: Thu, 18 Sep 2025 15:55:30 +0530 Subject: [PATCH 11/11] Apply 1 suggestion(s) to 1 file(s) Co-authored-by: Fabien Catteau --- db/migrate/20250911082754_add_organization_id_to_keys.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/db/migrate/20250911082754_add_organization_id_to_keys.rb b/db/migrate/20250911082754_add_organization_id_to_keys.rb index 1a21b3281fe268..e8a7f43e0ced7c 100644 --- a/db/migrate/20250911082754_add_organization_id_to_keys.rb +++ b/db/migrate/20250911082754_add_organization_id_to_keys.rb @@ -6,12 +6,17 @@ class AddOrganizationIdToKeys < Gitlab::Database::Migration[2.3] milestone '18.5' def up - add_column :keys, :organization_id, :bigint, default: 1, null: false + with_lock_retries do + add_column :keys, :organization_id, :bigint, default: 1, null: false + end + add_concurrent_index :keys, :organization_id add_concurrent_foreign_key :keys, :organizations, column: :organization_id, on_delete: :cascade end def down - remove_column :keys, :organization_id + with_lock_retries do + remove_column :keys, :organization_id + end end end -- GitLab