Race condition when caching a GPG Signature for a commit
This sentry issue shows the problem in production: https://sentry.gitlab.net/gitlab/gitlabcom/issues/616539
This sometimes occurs in tests
Job #156628951 failed for d6be539b:
This test seems to fail on a uniqueness constraint when creating the cached GpgSignature
in Gpg::Commit#create_cached_signature!
1) Projects > Files > Project owner creates a license file project maintainer creates a license file manually from a template
Failure/Error: signature.save! unless Gitlab::Database.read_only?
ActiveRecord::RecordNotUnique:
Mysql2::Error: Duplicate entry '\x91<f\xA3{JE\xB9v\x907\xC5\-#\x8B\xD0\x94-.' for key 'index_gpg_signatures_on_commit_sha': INSERT INTO `gpg_signatures` (`created_at`, `updated_at`, `project_id`, `commit_sha`, `gpg_key_primary_keyid`, `verification_status`) VALUES ('2019-02-05 15:19:51', '2019-02-05 15:19:51', 105, x'913c66a37b4a45b9769037c55c2d238bd0942d2e', x'627c5f589f467f17', 5)
# ./config/initializers/connection_fix.rb:20:in `execute'
# ./config/initializers/active_record_locking.rb:14:in `_create_record'
# ./lib/gitlab/gpg/commit.rb:92:in `block in create_cached_signature!'
# ./lib/gitlab/gpg/commit.rb:72:in `block in using_keychain'
# ./lib/gitlab/gpg.rb:97:in `optimistic_using_tmp_keychain'
# ./lib/gitlab/gpg.rb:78:in `block (2 levels) in using_tmp_keychain'
# ./lib/gitlab/gpg.rb:77:in `synchronize'
# ./lib/gitlab/gpg.rb:77:in `block in using_tmp_keychain'
# ./lib/gitlab/gpg.rb:76:in `using_tmp_keychain'
# ./lib/gitlab/gpg/commit.rb:54:in `using_keychain'
# ./lib/gitlab/gpg/commit.rb:90:in `create_cached_signature!'
# ./lib/gitlab/gpg/commit.rb:40:in `signature'
# ./app/models/commit.rb:330:in `signature'
# ./app/controllers/projects/commits_controller.rb:48:in `block (3 levels) in signatures'
# ./app/controllers/projects/commits_controller.rb:45:in `map'
# ./app/controllers/projects/commits_controller.rb:45:in `block (2 levels) in signatures'
# ./app/controllers/projects/commits_controller.rb:42:in `signatures'
# ./lib/gitlab/i18n.rb:55:in `with_locale'
# ./lib/gitlab/i18n.rb:61:in `with_user_locale'
# ./app/controllers/application_controller.rb:423:in `set_locale'
# ./lib/gitlab/middleware/multipart.rb:103:in `call'
# ./lib/gitlab/request_profiler/middleware.rb:16:in `call'
# ./lib/gitlab/query_limiting/middleware.rb:17:in `block in call'
# ./lib/gitlab/query_limiting/transaction.rb:39:in `run'
# ./lib/gitlab/query_limiting/middleware.rb:16:in `call'
# ./lib/gitlab/middleware/go.rb:20:in `call'
# ./lib/gitlab/etag_caching/middleware.rb:13:in `call'
# ./lib/gitlab/middleware/correlation_id.rb:16:in `block in call'
# ./lib/gitlab/correlation_id.rb:15:in `use_id'
# ./lib/gitlab/middleware/correlation_id.rb:15:in `call'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/request_context.rb:20:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:9:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:33:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:29:in `call'
# ------------------
# --- Caused by: ---
# Mysql2::Error:
# Duplicate entry '\x91<f\xA3{JE\xB9v\x907\xC5\-#\x8B\xD0\x94-.' for key 'index_gpg_signatures_on_commit_sha'
# ./config/initializers/connection_fix.rb:20:in `execute'
Finished in 12 minutes 44 seconds (files took 13.1 seconds to load)
974 examples, 1 failure, 21 pending
Edited by Bob Van Landuyt