Skip to content

CleanupBigintConversionsForPCiBuilds fails due to commit_id_convert_to_bigint owning sequences

My migrations are failing in my GDK:

main: == 20240617003021 CleanupBigintConversionsForPCiBuilds: migrating =============
main: -- remove_column(:p_ci_builds, "auto_canceled_by_id_convert_to_bigint", {:if_exists=>true})
main:    -> 0.0265s
main: -- remove_column(:p_ci_builds, "commit_id_convert_to_bigint", {:if_exists=>true})
main: == [advisory_lock_connection] object_id: 129800, pg_backend_pid: 96602
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DependentObjectsStillExist: ERROR:  cannot drop desired object(s) because other objects depend on them
DETAIL:  default value for column upload_id of table upload_states depends on sequence upload_states_upload_id_seq
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers.rb:776:in `block in revert_initialize_conversion_of_integer_to_bigint'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers.rb:776:in `each'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers.rb:776:in `revert_initialize_conversion_of_integer_to_bigint'
/Users/stanhu/gdk-ee/gitlab/db/post_migrate/20240617003021_cleanup_bigint_conversions_for_p_ci_builds.rb:20:in `up'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:33:in `block in exec_migration'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/query_analyzer.rb:40:in `within'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers/restrict_gitlab_schema.rb:30:in `exec_migration'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migration_helpers/automatic_lock_writes_on_tables.rb:21:in `exec_migration'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/with_lock_retries.rb:123:in `run_block'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/with_lock_retries.rb:134:in `block in run_block_with_lock_timeout'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `public_send'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/connection_proxy.rb:127:in `block in write_using_load_balancer'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/load_balancer.rb:141:in `block in read_write'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/load_balancer.rb:228:in `retry_with_backoff'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/load_balancer.rb:130:in `read_write'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/connection_proxy.rb:126:in `write_using_load_balancer'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/load_balancing/connection_proxy.rb:78:in `transaction'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/with_lock_retries.rb:129:in `run_block_with_lock_timeout'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/with_lock_retries.rb:97:in `run'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migrations/lock_retry_mixin.rb:52:in `ddl_transaction'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migrations/runner_backoff/active_record_mixin.rb:21:in `execute_migration_in_transaction'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migrations/pg_backend_pid.rb:15:in `block in with_advisory_lock_connection'
/Users/stanhu/gdk-ee/gitlab/lib/gitlab/database/migrations/pg_backend_pid.rb:12:in `with_advisory_lock_connection'
/Users/stanhu/.asdf/installs/ruby/3.2.3/bin/bundle:25:in `load'
/Users/stanhu/.asdf/installs/ruby/3.2.3/bin/bundle:25:in `<main>'

It seems that somehow upload_states_upload_id_seq is owned by public.p_ci_builds.commit_id_convert_to_bigint:

gitlabhq_development=# \d+ upload_states_upload_id_seq;
                Sequence "public.upload_states_upload_id_seq"
  Type  | Start | Minimum |       Maximum       | Increment | Cycles? | Cache
--------+-------+---------+---------------------+-----------+---------+-------
 bigint |     1 |       1 | 9223372036854775807 |         1 | no      |     1
Owned by: public.p_ci_builds.commit_id_convert_to_bigint

It should be owned by uploads_states.upload_id:

db/init_structure.sql:ALTER SEQUENCE upload_states_upload_id_seq OWNED BY upload_states.upload_id;