From a486916876cafb36e05c805494891a18a2adbe48 Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Tue, 23 Sep 2025 14:51:10 +0530 Subject: [PATCH 1/6] Add default value to workspace.desired_config_generator_version This change is required because workspace.desired_config_generator_version does not have any default value on database level. This made https://gitlab.com/gitlab-org/gitlab/-/merge_requests/205613 backwards incompatible. Changelog: other EE: true --- ..._workspace_desired_config_generator_version.rb | 13 +++++++++++++ ..._desired_config_generator_version_workspace.rb | 15 +++++++++++++++ db/schema_migrations/20250923074051 | 1 + db/schema_migrations/20250923090252 | 1 + db/structure.sql | 2 +- 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb create mode 100644 db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb create mode 100644 db/schema_migrations/20250923074051 create mode 100644 db/schema_migrations/20250923090252 diff --git a/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb new file mode 100644 index 00000000000000..d1d29fce30a304 --- /dev/null +++ b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddDefaultValueToWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] + milestone '18.5' + + def up + change_column_default :workspaces, :desired_config_generator_version, 3 + end + + def down + change_column_default :workspaces, :desired_config_generator_version, nil + end +end diff --git a/db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb b/db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb new file mode 100644 index 00000000000000..4d4f31f208b1c2 --- /dev/null +++ b/db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class UpdateNilDesiredConfigGeneratorVersionWorkspace < Gitlab::Database::Migration[2.3] + disable_ddl_transaction! + restrict_gitlab_migration gitlab_schema: :gitlab_main + milestone '18.5' + + def up + execute "UPDATE workspaces SET desired_config_generator_version = 3 WHERE desired_config_generator_version IS NULL" + end + + def down + # no-op + end +end diff --git a/db/schema_migrations/20250923074051 b/db/schema_migrations/20250923074051 new file mode 100644 index 00000000000000..7a6ba4c41a1361 --- /dev/null +++ b/db/schema_migrations/20250923074051 @@ -0,0 +1 @@ +89070fe81a15bdc3f7a7918db13ca5ddf1cd585b196c21ca696173c3e18cf52e \ No newline at end of file diff --git a/db/schema_migrations/20250923090252 b/db/schema_migrations/20250923090252 new file mode 100644 index 00000000000000..a224f85ea46978 --- /dev/null +++ b/db/schema_migrations/20250923090252 @@ -0,0 +1 @@ +72d3f5aaf8c8e05b8b8061596f0dc281a217b9c9acdcc8180edd015d09d666cd \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 211863b3de8a53..519c9a8fda41aa 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -29315,9 +29315,9 @@ CREATE TABLE workspaces ( url_prefix text, url_query_string text, workspaces_agent_config_version integer NOT NULL, - desired_config_generator_version integer, project_ref text, actual_state_updated_at timestamp with time zone NOT NULL, + desired_config_generator_version integer DEFAULT 3, CONSTRAINT check_15543fb0fa CHECK ((char_length(name) <= 64)), CONSTRAINT check_157d5f955c CHECK ((char_length(namespace) <= 64)), CONSTRAINT check_2b401b0034 CHECK ((char_length(deployment_resource_version) <= 64)), -- GitLab From 153096e54a628c7502bf5b642c6f8ae40eb7cf6f Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Mon, 29 Sep 2025 10:43:42 +0530 Subject: [PATCH 2/6] Change update migration to post_migrate --- ...ate_nil_desired_config_generator_version_workspace.rb} | 8 +++++++- db/schema_migrations/20250923090252 | 1 - db/schema_migrations/20250929050402 | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) rename db/{migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb => post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb} (54%) delete mode 100644 db/schema_migrations/20250923090252 create mode 100644 db/schema_migrations/20250929050402 diff --git a/db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb b/db/post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb similarity index 54% rename from db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb rename to db/post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb index 4d4f31f208b1c2..fd5741415a19c0 100644 --- a/db/migrate/20250923090252_update_nil_desired_config_generator_version_workspace.rb +++ b/db/post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb @@ -6,7 +6,13 @@ class UpdateNilDesiredConfigGeneratorVersionWorkspace < Gitlab::Database::Migrat milestone '18.5' def up - execute "UPDATE workspaces SET desired_config_generator_version = 3 WHERE desired_config_generator_version IS NULL" + workspaces = define_batchable_model('workspaces') + + workspaces + .where(desired_config_generator_version: nil) + .each_batch(of: 50) do |batch| + batch.update_all(desired_config_generator_version: 3) + end end def down diff --git a/db/schema_migrations/20250923090252 b/db/schema_migrations/20250923090252 deleted file mode 100644 index a224f85ea46978..00000000000000 --- a/db/schema_migrations/20250923090252 +++ /dev/null @@ -1 +0,0 @@ -72d3f5aaf8c8e05b8b8061596f0dc281a217b9c9acdcc8180edd015d09d666cd \ No newline at end of file diff --git a/db/schema_migrations/20250929050402 b/db/schema_migrations/20250929050402 new file mode 100644 index 00000000000000..464dca3940e78e --- /dev/null +++ b/db/schema_migrations/20250929050402 @@ -0,0 +1 @@ +db096582b81cf8456eb1c4a5b61b5033c56833d6e0f4b272afad629452ba393d \ No newline at end of file -- GitLab From 871fd7ac307af9b64b3a2bf81e414a5ac1e62aa5 Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Wed, 1 Oct 2025 14:29:47 +0530 Subject: [PATCH 3/6] Add partial index to speed up setting default values on null columns This is needed to resolve https://gitlab.com/gitlab-org/gitlab/-/merge_requests/206001#note_2784844593 --- ...ue_to_workspace_desired_config_generator_version.rb | 10 ++++++++++ db/structure.sql | 2 ++ 2 files changed, 12 insertions(+) diff --git a/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb index d1d29fce30a304..8ee2dd4d04d115 100644 --- a/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb +++ b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb @@ -2,12 +2,22 @@ class AddDefaultValueToWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] milestone '18.5' + disable_ddl_transaction! def up + add_concurrent_index( + :workspaces, + :id, + where: "desired_config_generator_version IS NULL", + name: "idx_workspaces_null_config_version_id" + ) + change_column_default :workspaces, :desired_config_generator_version, 3 end def down + remove_concurrent_index_by_name :workspaces, name: "idx_workspaces_null_config_version_id" + change_column_default :workspaces, :desired_config_generator_version, nil end end diff --git a/db/structure.sql b/db/structure.sql index 519c9a8fda41aa..520742ade9e775 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -38164,6 +38164,8 @@ CREATE INDEX idx_wi_type_custom_lifecycles_on_work_item_type_id ON work_item_typ CREATE INDEX idx_workflows_status_updated_at_id ON duo_workflows_workflows USING btree (status, updated_at, id); +CREATE INDEX idx_workspaces_null_config_version_id ON workspaces USING btree (id) WHERE (desired_config_generator_version IS NULL); + CREATE INDEX idx_zoekt_last_indexed_at_gt_used_storage_bytes_updated_at ON zoekt_indices USING btree (used_storage_bytes_updated_at) WHERE (last_indexed_at >= used_storage_bytes_updated_at); CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_size_bytes ON zoekt_repositories USING btree (zoekt_index_id, size_bytes); -- GitLab From 1993e72dc608edc8543e1bd98d31ce9fd158f29b Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Wed, 1 Oct 2025 23:55:24 +0530 Subject: [PATCH 4/6] Split migrations in multiple files --- ...kspace_desired_config_generator_version.rb | 10 --------- ...kspace_desired_config_generator_version.rb | 22 +++++++++++++++++++ ...kspace_desired_config_generator_version.rb | 22 +++++++++++++++++++ ...red_config_generator_version_workspace.rb} | 0 db/schema_migrations/20250929050402 | 1 - db/schema_migrations/20251001180828 | 1 + db/schema_migrations/20251001180830 | 1 + db/schema_migrations/20251001180844 | 1 + db/structure.sql | 4 +--- 9 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 db/migrate/20251001180828_add_index_on_workspace_desired_config_generator_version.rb create mode 100644 db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb rename db/post_migrate/{20250929050402_update_nil_desired_config_generator_version_workspace.rb => 20251001180830_update_nil_desired_config_generator_version_workspace.rb} (100%) delete mode 100644 db/schema_migrations/20250929050402 create mode 100644 db/schema_migrations/20251001180828 create mode 100644 db/schema_migrations/20251001180830 create mode 100644 db/schema_migrations/20251001180844 diff --git a/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb index 8ee2dd4d04d115..d1d29fce30a304 100644 --- a/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb +++ b/db/migrate/20250923074051_add_default_value_to_workspace_desired_config_generator_version.rb @@ -2,22 +2,12 @@ class AddDefaultValueToWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] milestone '18.5' - disable_ddl_transaction! def up - add_concurrent_index( - :workspaces, - :id, - where: "desired_config_generator_version IS NULL", - name: "idx_workspaces_null_config_version_id" - ) - change_column_default :workspaces, :desired_config_generator_version, 3 end def down - remove_concurrent_index_by_name :workspaces, name: "idx_workspaces_null_config_version_id" - change_column_default :workspaces, :desired_config_generator_version, nil end end diff --git a/db/migrate/20251001180828_add_index_on_workspace_desired_config_generator_version.rb b/db/migrate/20251001180828_add_index_on_workspace_desired_config_generator_version.rb new file mode 100644 index 00000000000000..2f5943e6679d78 --- /dev/null +++ b/db/migrate/20251001180828_add_index_on_workspace_desired_config_generator_version.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +# See https://docs.gitlab.com/ee/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddIndexOnWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] + milestone '18.5' + disable_ddl_transaction! + + def up + add_concurrent_index( + :workspaces, + :id, + where: "desired_config_generator_version IS NULL", + name: "idx_workspaces_null_config_version_id" + ) + end + + def down + remove_concurrent_index_by_name :workspaces, name: "idx_workspaces_null_config_version_id" + end +end diff --git a/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb b/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb new file mode 100644 index 00000000000000..3c88bffc8bd401 --- /dev/null +++ b/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +# See https://docs.gitlab.com/ee/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class RemoveIndexOnWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] + milestone '18.5' + disable_ddl_transaction! + + def up + remove_concurrent_index_by_name :workspaces, name: "idx_workspaces_null_config_version_id" + end + + def down + add_concurrent_index( + :workspaces, + :id, + where: "desired_config_generator_version IS NULL", + name: "idx_workspaces_null_config_version_id" + ) + end +end diff --git a/db/post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb b/db/post_migrate/20251001180830_update_nil_desired_config_generator_version_workspace.rb similarity index 100% rename from db/post_migrate/20250929050402_update_nil_desired_config_generator_version_workspace.rb rename to db/post_migrate/20251001180830_update_nil_desired_config_generator_version_workspace.rb diff --git a/db/schema_migrations/20250929050402 b/db/schema_migrations/20250929050402 deleted file mode 100644 index 464dca3940e78e..00000000000000 --- a/db/schema_migrations/20250929050402 +++ /dev/null @@ -1 +0,0 @@ -db096582b81cf8456eb1c4a5b61b5033c56833d6e0f4b272afad629452ba393d \ No newline at end of file diff --git a/db/schema_migrations/20251001180828 b/db/schema_migrations/20251001180828 new file mode 100644 index 00000000000000..7baab5be2bd8b7 --- /dev/null +++ b/db/schema_migrations/20251001180828 @@ -0,0 +1 @@ +2aea40daf2bbc511b242523e9f42d1a87eea01d59dfcb1b36760dfad066a659e \ No newline at end of file diff --git a/db/schema_migrations/20251001180830 b/db/schema_migrations/20251001180830 new file mode 100644 index 00000000000000..97ef1410f5952d --- /dev/null +++ b/db/schema_migrations/20251001180830 @@ -0,0 +1 @@ +8f8b2a331aa56032628eee28b07756bf83b1501a42665f99a82bdb5cd03338ad \ No newline at end of file diff --git a/db/schema_migrations/20251001180844 b/db/schema_migrations/20251001180844 new file mode 100644 index 00000000000000..1201ba6521f985 --- /dev/null +++ b/db/schema_migrations/20251001180844 @@ -0,0 +1 @@ +8328d2770de253acb487284b57f8fc8cf31f172eb1699c43643b387124489af2 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 520742ade9e775..3ef94737462648 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -29315,9 +29315,9 @@ CREATE TABLE workspaces ( url_prefix text, url_query_string text, workspaces_agent_config_version integer NOT NULL, + desired_config_generator_version integer DEFAULT 3, project_ref text, actual_state_updated_at timestamp with time zone NOT NULL, - desired_config_generator_version integer DEFAULT 3, CONSTRAINT check_15543fb0fa CHECK ((char_length(name) <= 64)), CONSTRAINT check_157d5f955c CHECK ((char_length(namespace) <= 64)), CONSTRAINT check_2b401b0034 CHECK ((char_length(deployment_resource_version) <= 64)), @@ -38164,8 +38164,6 @@ CREATE INDEX idx_wi_type_custom_lifecycles_on_work_item_type_id ON work_item_typ CREATE INDEX idx_workflows_status_updated_at_id ON duo_workflows_workflows USING btree (status, updated_at, id); -CREATE INDEX idx_workspaces_null_config_version_id ON workspaces USING btree (id) WHERE (desired_config_generator_version IS NULL); - CREATE INDEX idx_zoekt_last_indexed_at_gt_used_storage_bytes_updated_at ON zoekt_indices USING btree (used_storage_bytes_updated_at) WHERE (last_indexed_at >= used_storage_bytes_updated_at); CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_size_bytes ON zoekt_repositories USING btree (zoekt_index_id, size_bytes); -- GitLab From d55eb13430b6478e6116ec815c2414f177d1cd2b Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Mon, 6 Oct 2025 14:22:35 +0530 Subject: [PATCH 5/6] Apply 2 suggestion(s) to 2 file(s) Co-authored-by: Andy Schoenen --- ...move_index_on_workspace_desired_config_generator_version.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb b/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb index 3c88bffc8bd401..6154c8e26b9a1b 100644 --- a/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb +++ b/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb @@ -1,8 +1,5 @@ # frozen_string_literal: true -# See https://docs.gitlab.com/ee/development/migration_style_guide.html -# for more information on how to write migrations for GitLab. - class RemoveIndexOnWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] milestone '18.5' disable_ddl_transaction! -- GitLab From 829007e7689964a0bef7d20e970491841c596a04 Mon Sep 17 00:00:00 2001 From: Ashvin Sharma Date: Mon, 6 Oct 2025 14:54:32 +0530 Subject: [PATCH 6/6] Remove delete index migration We will remove this index when we delete the column in the next milestone. --- ...kspace_desired_config_generator_version.rb | 19 ------------------- db/schema_migrations/20251001180844 | 1 - db/structure.sql | 2 ++ 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb delete mode 100644 db/schema_migrations/20251001180844 diff --git a/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb b/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb deleted file mode 100644 index 6154c8e26b9a1b..00000000000000 --- a/db/migrate/20251001180844_remove_index_on_workspace_desired_config_generator_version.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -class RemoveIndexOnWorkspaceDesiredConfigGeneratorVersion < Gitlab::Database::Migration[2.3] - milestone '18.5' - disable_ddl_transaction! - - def up - remove_concurrent_index_by_name :workspaces, name: "idx_workspaces_null_config_version_id" - end - - def down - add_concurrent_index( - :workspaces, - :id, - where: "desired_config_generator_version IS NULL", - name: "idx_workspaces_null_config_version_id" - ) - end -end diff --git a/db/schema_migrations/20251001180844 b/db/schema_migrations/20251001180844 deleted file mode 100644 index 1201ba6521f985..00000000000000 --- a/db/schema_migrations/20251001180844 +++ /dev/null @@ -1 +0,0 @@ -8328d2770de253acb487284b57f8fc8cf31f172eb1699c43643b387124489af2 \ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 3ef94737462648..110754bdce9415 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -38164,6 +38164,8 @@ CREATE INDEX idx_wi_type_custom_lifecycles_on_work_item_type_id ON work_item_typ CREATE INDEX idx_workflows_status_updated_at_id ON duo_workflows_workflows USING btree (status, updated_at, id); +CREATE INDEX idx_workspaces_null_config_version_id ON workspaces USING btree (id) WHERE (desired_config_generator_version IS NULL); + CREATE INDEX idx_zoekt_last_indexed_at_gt_used_storage_bytes_updated_at ON zoekt_indices USING btree (used_storage_bytes_updated_at) WHERE (last_indexed_at >= used_storage_bytes_updated_at); CREATE INDEX idx_zoekt_repositories_on_zoekt_index_id_and_size_bytes ON zoekt_repositories USING btree (zoekt_index_id, size_bytes); -- GitLab