Skip to content

Fix Cross-DB transaction on Deployment Status Sync

What does this MR do and why?

This MR fixes the Cross-DB transaction on Deployment Status Synchronization.

Currently, when a pipeline job status transitions (e.g. a runner finished a job and transition to success status), an associated deployment status also transitions. These statuses are basically mirrored (except some of the build specific statuses such as preparing). In the state machine of Ci::Build, the update query is performed in the same transaction.

However, since we're moving ci_* tables out of the main database, this type of queries falls into cross-db transaction, which is not ideal from a performance perspective (please see the issue for more information). Hence we're executing the update process after the transaction has been committed. This theoretically loses the data consistency, however, it's already best-effort type so this MR doesn't harm the current implication.

This change is behind update_deployment_after_transaction_commit feature flag.

This MR also slightly refactors the deployment status synchronization process to make it more readable.

Related #338867 (closed)

Screenshots or screen recordings

Peek_2021-10-04_17-21

How to set up and validate locally

Add the following .gitlab-ci.yml and make sure that the deployment status transitions.

success-deploy:
    script: echo 'a'
    environment: production-1

failed-deploy:
    script: exit 1
    environment: production-2

canceled-deploy:
    script: echo 'a'
    when: manual
    environment: production-3

skipped-deploy:
    stage: deploy
    script: echo 'a'
    environment: production-4

Before/After Queries

Before
  [1m[36mTRANSACTION (0.1ms)[0m  [1m[35mBEGIN /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:109:in `begin_db_transaction'*/[0m
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mCi::Build Update (0.7ms)[0m  [1m[33mUPDATE "ci_builds" SET "status" = $1, "updated_at" = $2, "started_at" = $3, "runner_id" = $4, "processed" = $5, "lock_version" = $6 WHERE "ci_builds"."id" = $7 AND "ci_builds"."lock_version" = $8 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["status", "running"], ["updated_at", "2021-10-11 07:28:45.406534"], ["started_at", "2021-10-11 07:28:45.402609"], ["runner_id", 39], ["processed", false], ["lock_version", 2], ["id", 3211], ["lock_version", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mCi::BuildMetadata Update (0.2ms)[0m  [1m[33mUPDATE "ci_builds_metadata" SET "config_options" = $1 WHERE "ci_builds_metadata"."id" = $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["config_options", "{\"script\":[\"echo 'a'\"],\"environment\":{\"name\":\"production-1\",\"action\":\"start\"}}"], ["id", 3178]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mActsAsTaggableOn::Tag Load (0.2ms)[0m  [1m[34mSELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL) /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["taggable_id", 3211], ["taggable_type", "CommitStatus"]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[35m (0.2ms)[0m  [1m[34mSELECT CASE
    WHEN pg_is_in_recovery() = true AND EXISTS (SELECT 1 FROM pg_stat_get_wal_senders())
      THEN pg_last_wal_replay_lsn()::text
    WHEN pg_is_in_recovery() = false
      THEN pg_current_wal_insert_lsn()::text
      ELSE NULL
    END AS location;
 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m
  ↳ lib/gitlab/database/connection.rb:226:in `get_write_location'
  [1m[36mProject Load (0.5ms)[0m  [1m[34mSELECT "projects"."id", "projects"."name", "projects"."path", "projects"."description", "projects"."created_at", "projects"."updated_at", "projects"."creator_id", "projects"."namespace_id", "projects"."last_activity_at", "projects"."import_url", "projects"."visibility_level", "projects"."archived", "projects"."avatar", "projects"."merge_requests_template", "projects"."star_count", "projects"."merge_requests_rebase_enabled", "projects"."import_type", "projects"."import_source", "projects"."approvals_before_merge", "projects"."reset_approvals_on_push", "projects"."merge_requests_ff_only_enabled", "projects"."issues_template", "projects"."mirror", "projects"."mirror_user_id", "projects"."shared_runners_enabled", "projects"."runners_token", "projects"."build_coverage_regex", "projects"."build_allow_git_fetch", "projects"."build_timeout", "projects"."mirror_trigger_builds", "projects"."pending_delete", "projects"."public_builds", "projects"."last_repository_check_failed", "projects"."last_repository_check_at", "projects"."only_allow_merge_if_pipeline_succeeds", "projects"."has_external_issue_tracker", "projects"."repository_storage", "projects"."repository_read_only", "projects"."request_access_enabled", "projects"."has_external_wiki", "projects"."ci_config_path", "projects"."lfs_enabled", "projects"."description_html", "projects"."only_allow_merge_if_all_discussions_are_resolved", "projects"."repository_size_limit", "projects"."printing_merge_request_link_enabled", "projects"."auto_cancel_pending_pipelines", "projects"."service_desk_enabled", "projects"."cached_markdown_version", "projects"."delete_error", "projects"."last_repository_updated_at", "projects"."disable_overriding_approvers_per_merge_request", "projects"."storage_version", "projects"."resolve_outdated_diff_discussions", "projects"."remote_mirror_available_overridden", "projects"."only_mirror_protected_branches", "projects"."pull_mirror_available_overridden", "projects"."jobs_cache_index", "projects"."external_authorization_classification_label", "projects"."mirror_overwrites_diverged_branches", "projects"."pages_https_only", "projects"."external_webhook_token", "projects"."packages_enabled", "projects"."merge_requests_author_approval", "projects"."pool_repository_id", "projects"."runners_token_encrypted", "projects"."bfg_object_map", "projects"."detected_repository_languages", "projects"."merge_requests_disable_committers_approval", "projects"."require_password_to_approve", "projects"."emails_disabled", "projects"."max_pages_size", "projects"."max_artifacts_size", "projects"."remove_source_branch_after_merge", "projects"."marked_for_deletion_at", "projects"."marked_for_deletion_by_user_id", "projects"."autoclose_referenced_issues", "projects"."suggestion_commit_message", "projects"."project_namespace_id" FROM "projects" WHERE "projects"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 217], ["LIMIT", 1]]
  ↳ app/models/ci/build_metadata.rb:63:in `block in project_timeout'
  [1m[36mCi::Runner Load (0.2ms)[0m  [1m[34mSELECT "ci_runners".* FROM "ci_runners" WHERE "ci_runners"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 39], ["LIMIT", 1]]
  ↳ app/models/ci/build_metadata.rb:86:in `runner_timeout_set?'
  [1m[36mCi::BuildMetadata Update (0.5ms)[0m  [1m[33mUPDATE "ci_builds_metadata" SET "timeout" = $1, "timeout_source" = $2, "config_options" = $3 WHERE "ci_builds_metadata"."id" = $4 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["timeout", 3600], ["timeout_source", 2], ["config_options", "{\"script\":[\"echo 'a'\"],\"environment\":{\"name\":\"production-1\",\"action\":\"start\"}}"], ["id", 3178]]
  ↳ app/models/ci/build_metadata.rb:48:in `update_timeout_state'
  [1m[36mDeployment Load (0.6ms)[0m  [1m[34mSELECT "deployments".* FROM "deployments" WHERE "deployments"."deployable_id" = $1 AND "deployments"."deployable_type" = $2 LIMIT $3 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["deployable_id", 3211], ["deployable_type", "CommitStatus"], ["LIMIT", 1]]
  ↳ app/models/ci/build.rb:314:in `block (3 levels) in <class:Build>'
  [1m[36mProject Load (0.5ms)[0m  [1m[34mSELECT "projects"."id", "projects"."name", "projects"."path", "projects"."description", "projects"."created_at", "projects"."updated_at", "projects"."creator_id", "projects"."namespace_id", "projects"."last_activity_at", "projects"."import_url", "projects"."visibility_level", "projects"."archived", "projects"."avatar", "projects"."merge_requests_template", "projects"."star_count", "projects"."merge_requests_rebase_enabled", "projects"."import_type", "projects"."import_source", "projects"."approvals_before_merge", "projects"."reset_approvals_on_push", "projects"."merge_requests_ff_only_enabled", "projects"."issues_template", "projects"."mirror", "projects"."mirror_user_id", "projects"."shared_runners_enabled", "projects"."runners_token", "projects"."build_coverage_regex", "projects"."build_allow_git_fetch", "projects"."build_timeout", "projects"."mirror_trigger_builds", "projects"."pending_delete", "projects"."public_builds", "projects"."last_repository_check_failed", "projects"."last_repository_check_at", "projects"."only_allow_merge_if_pipeline_succeeds", "projects"."has_external_issue_tracker", "projects"."repository_storage", "projects"."repository_read_only", "projects"."request_access_enabled", "projects"."has_external_wiki", "projects"."ci_config_path", "projects"."lfs_enabled", "projects"."description_html", "projects"."only_allow_merge_if_all_discussions_are_resolved", "projects"."repository_size_limit", "projects"."printing_merge_request_link_enabled", "projects"."auto_cancel_pending_pipelines", "projects"."service_desk_enabled", "projects"."cached_markdown_version", "projects"."delete_error", "projects"."last_repository_updated_at", "projects"."disable_overriding_approvers_per_merge_request", "projects"."storage_version", "projects"."resolve_outdated_diff_discussions", "projects"."remote_mirror_available_overridden", "projects"."only_mirror_protected_branches", "projects"."pull_mirror_available_overridden", "projects"."jobs_cache_index", "projects"."external_authorization_classification_label", "projects"."mirror_overwrites_diverged_branches", "projects"."pages_https_only", "projects"."external_webhook_token", "projects"."packages_enabled", "projects"."merge_requests_author_approval", "projects"."pool_repository_id", "projects"."runners_token_encrypted", "projects"."bfg_object_map", "projects"."detected_repository_languages", "projects"."merge_requests_disable_committers_approval", "projects"."require_password_to_approve", "projects"."emails_disabled", "projects"."max_pages_size", "projects"."max_artifacts_size", "projects"."remove_source_branch_after_merge", "projects"."marked_for_deletion_at", "projects"."marked_for_deletion_by_user_id", "projects"."autoclose_referenced_issues", "projects"."suggestion_commit_message", "projects"."project_namespace_id" FROM "projects" WHERE "projects"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 217], ["LIMIT", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mEnvironment Load (0.2ms)[0m  [1m[34mSELECT "environments".* FROM "environments" WHERE "environments"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 596], ["LIMIT", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mDeployment Update (0.4ms)[0m  [1m[33mUPDATE "deployments" SET "updated_at" = $1, "status" = $2 WHERE "deployments"."id" = $3 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["updated_at", "2021-10-11 07:28:45.463107"], ["status", 1], ["id", 916]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mProjectCiCdSetting Load (0.4ms)[0m  [1m[34mSELECT "project_ci_cd_settings".* FROM "project_ci_cd_settings" WHERE "project_ci_cd_settings"."project_id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["project_id", 217], ["LIMIT", 1]]
  ↳ app/models/project.rb:2663:in `ci_forward_deployment_enabled?'
  [1m[36mTRANSACTION (0.7ms)[0m  [1m[35mCOMMIT /*application:web,correlation_id:01FHQ41Z72RFKARS26AY2DPE5G,endpoint_id:POST /api/:version/jobs/request,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:119:in `commit_db_transaction'*/[0m
  ↳ lib/gitlab/database.rb:287:in `commit'
After
  [1m[36mTRANSACTION (0.1ms)[0m  [1m[35mBEGIN /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:109:in `begin_db_transaction'*/[0m
  [1m[36mPlanLimits Load (0.7ms)[0m  [1m[34mSELECT "plan_limits"."id", "plan_limits"."plan_id", "plan_limits"."ci_active_pipelines", "plan_limits"."ci_pipeline_size", "plan_limits"."ci_active_jobs", "plan_limits"."project_hooks", "plan_limits"."group_hooks", "plan_limits"."ci_project_subscriptions", "plan_limits"."ci_pipeline_schedules", "plan_limits"."offset_pagination_limit", "plan_limits"."ci_instance_level_variables", "plan_limits"."storage_size_limit", "plan_limits"."ci_max_artifact_size_lsif", "plan_limits"."ci_max_artifact_size_archive", "plan_limits"."ci_max_artifact_size_metadata", "plan_limits"."ci_max_artifact_size_trace", "plan_limits"."ci_max_artifact_size_junit", "plan_limits"."ci_max_artifact_size_sast", "plan_limits"."ci_max_artifact_size_dependency_scanning", "plan_limits"."ci_max_artifact_size_container_scanning", "plan_limits"."ci_max_artifact_size_dast", "plan_limits"."ci_max_artifact_size_codequality", "plan_limits"."ci_max_artifact_size_license_management", "plan_limits"."ci_max_artifact_size_license_scanning", "plan_limits"."ci_max_artifact_size_performance", "plan_limits"."ci_max_artifact_size_metrics", "plan_limits"."ci_max_artifact_size_metrics_referee", "plan_limits"."ci_max_artifact_size_network_referee", "plan_limits"."ci_max_artifact_size_dotenv", "plan_limits"."ci_max_artifact_size_cobertura", "plan_limits"."ci_max_artifact_size_terraform", "plan_limits"."ci_max_artifact_size_accessibility", "plan_limits"."ci_max_artifact_size_cluster_applications", "plan_limits"."ci_max_artifact_size_secret_detection", "plan_limits"."ci_max_artifact_size_requirements", "plan_limits"."ci_max_artifact_size_coverage_fuzzing", "plan_limits"."ci_max_artifact_size_browser_performance", "plan_limits"."ci_max_artifact_size_load_performance", "plan_limits"."ci_needs_size_limit", "plan_limits"."conan_max_file_size", "plan_limits"."maven_max_file_size", "plan_limits"."npm_max_file_size", "plan_limits"."nuget_max_file_size", "plan_limits"."pypi_max_file_size", "plan_limits"."generic_packages_max_file_size", "plan_limits"."golang_max_file_size", "plan_limits"."debian_max_file_size", "plan_limits"."project_feature_flags", "plan_limits"."ci_max_artifact_size_api_fuzzing", "plan_limits"."ci_pipeline_deployments", "plan_limits"."pull_mirror_interval_seconds", "plan_limits"."daily_invites", "plan_limits"."rubygems_max_file_size", "plan_limits"."terraform_module_max_file_size", "plan_limits"."helm_max_file_size", "plan_limits"."ci_registered_group_runners", "plan_limits"."ci_registered_project_runners", "plan_limits"."web_hook_calls", "plan_limits"."ci_daily_pipeline_schedule_triggers", "plan_limits"."ci_max_artifact_size_cluster_image_scanning", "plan_limits"."ci_jobs_trace_size_limit", "plan_limits"."pages_file_entries", "plan_limits"."dast_profile_schedules", "plan_limits"."external_audit_event_destinations" FROM "plan_limits" WHERE "plan_limits"."plan_id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ3NFQMH7GPP5HGN8JPMA4D,endpoint_id:PATCH /api/:version/jobs/:id/trace,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["plan_id", 1], ["LIMIT", 1]]
  ↳ app/models/plan.rb:30:in `actual_limits'
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mCi::Pipeline Load (0.3ms)[0m  [1m[34mSELECT "ci_pipelines".* FROM "ci_pipelines" WHERE "ci_pipelines"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 801], ["LIMIT", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mCi::Build Update (0.8ms)[0m  [1m[33mUPDATE "ci_builds" SET "status" = $1, "finished_at" = $2, "updated_at" = $3, "processed" = $4, "lock_version" = $5 WHERE "ci_builds"."id" = $6 AND "ci_builds"."lock_version" = $7 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["status", "success"], ["finished_at", "2021-10-11 07:21:56.333872"], ["updated_at", "2021-10-11 07:21:56.342626"], ["processed", false], ["lock_version", 3], ["id", 3207], ["lock_version", 2]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mActsAsTaggableOn::Tagging Load (0.2ms)[0m  [1m[34mSELECT "taggings"."tag_id", "taggings"."taggable_type", "taggings"."tagger_id", "taggings"."tagger_type", "taggings"."context", "taggings"."created_at", "taggings"."id", "taggings"."taggable_id" FROM "taggings" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["taggable_id", 3207], ["taggable_type", "CommitStatus"]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mFeature::FlipperGate Load (0.1ms)[0m  [1m[34mSELECT "feature_gates".* FROM "feature_gates" WHERE "feature_gates"."feature_key" = $1 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["feature_key", "ci_untrack_shared_runner_builds"]]
  ↳ lib/feature.rb:84:in `enabled?'
  [1m[36mCi::BuildRunnerSession Destroy (0.8ms)[0m  [1m[31mDELETE FROM "ci_builds_runner_session" WHERE "ci_builds_runner_session"."build_id" = $1 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["build_id", 3207]]
  ↳ app/models/ci/build.rb:302:in `block (2 levels) in <class:Build>'
  [1m[36mTRANSACTION (0.8ms)[0m  [1m[35mCOMMIT /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:119:in `commit_db_transaction'*/[0m
  ↳ lib/gitlab/database.rb:287:in `commit'
  [1m[36mTRANSACTION (0.1ms)[0m  [1m[35mBEGIN /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:109:in `begin_db_transaction'*/[0m
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mProject Load (0.5ms)[0m  [1m[34mSELECT "projects"."id", "projects"."name", "projects"."path", "projects"."description", "projects"."created_at", "projects"."updated_at", "projects"."creator_id", "projects"."namespace_id", "projects"."last_activity_at", "projects"."import_url", "projects"."visibility_level", "projects"."archived", "projects"."avatar", "projects"."merge_requests_template", "projects"."star_count", "projects"."merge_requests_rebase_enabled", "projects"."import_type", "projects"."import_source", "projects"."approvals_before_merge", "projects"."reset_approvals_on_push", "projects"."merge_requests_ff_only_enabled", "projects"."issues_template", "projects"."mirror", "projects"."mirror_user_id", "projects"."shared_runners_enabled", "projects"."runners_token", "projects"."build_coverage_regex", "projects"."build_allow_git_fetch", "projects"."build_timeout", "projects"."mirror_trigger_builds", "projects"."pending_delete", "projects"."public_builds", "projects"."last_repository_check_failed", "projects"."last_repository_check_at", "projects"."only_allow_merge_if_pipeline_succeeds", "projects"."has_external_issue_tracker", "projects"."repository_storage", "projects"."repository_read_only", "projects"."request_access_enabled", "projects"."has_external_wiki", "projects"."ci_config_path", "projects"."lfs_enabled", "projects"."description_html", "projects"."only_allow_merge_if_all_discussions_are_resolved", "projects"."repository_size_limit", "projects"."printing_merge_request_link_enabled", "projects"."auto_cancel_pending_pipelines", "projects"."service_desk_enabled", "projects"."cached_markdown_version", "projects"."delete_error", "projects"."last_repository_updated_at", "projects"."disable_overriding_approvers_per_merge_request", "projects"."storage_version", "projects"."resolve_outdated_diff_discussions", "projects"."remote_mirror_available_overridden", "projects"."only_mirror_protected_branches", "projects"."pull_mirror_available_overridden", "projects"."jobs_cache_index", "projects"."external_authorization_classification_label", "projects"."mirror_overwrites_diverged_branches", "projects"."pages_https_only", "projects"."external_webhook_token", "projects"."packages_enabled", "projects"."merge_requests_author_approval", "projects"."pool_repository_id", "projects"."runners_token_encrypted", "projects"."bfg_object_map", "projects"."detected_repository_languages", "projects"."merge_requests_disable_committers_approval", "projects"."require_password_to_approve", "projects"."emails_disabled", "projects"."max_pages_size", "projects"."max_artifacts_size", "projects"."remove_source_branch_after_merge", "projects"."marked_for_deletion_at", "projects"."marked_for_deletion_by_user_id", "projects"."autoclose_referenced_issues", "projects"."suggestion_commit_message", "projects"."project_namespace_id" FROM "projects" WHERE "projects"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 217], ["LIMIT", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mEnvironment Load (0.5ms)[0m  [1m[34mSELECT "environments".* FROM "environments" WHERE "environments"."id" = $1 LIMIT $2 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:53:in `exec_query'*/[0m  [["id", 596], ["LIMIT", 1]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mDeployment Update (0.8ms)[0m  [1m[33mUPDATE "deployments" SET "updated_at" = $1, "status" = $2, "finished_at" = $3 WHERE "deployments"."id" = $4 /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:70:in `exec_delete'*/[0m  [["updated_at", "2021-10-11 07:21:56.392058"], ["status", 2], ["finished_at", "2021-10-11 07:21:56.378854"], ["id", 912]]
  ↳ lib/gitlab/database.rb:266:in `block in transaction'
  [1m[36mTRANSACTION (0.6ms)[0m  [1m[35mCOMMIT /*application:web,correlation_id:01FHQ3NFRS39YWABMXV7EMG8B6,endpoint_id:PUT /api/:version/jobs/:id,db_config_name:main,line:/devkitkat/services/rails/cache/ruby/2.7.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:119:in `commit_db_transaction'*/[0m
  ↳ lib/gitlab/database.rb:287:in `commit'

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Shinya Maeda

Merge request reports