Failing to lazily build `user_details` can result in duplicate entity violations
The failure can be seen at: https://gitlab.com/gitlab-org/gitlab/-/jobs/1334203283#L1832, and is in ./ee/spec/features/groups/wiki/user_views_wiki_empty_spec.rb:36
1) Group > User views empty wiki behaves like User views empty wiki when group is public and user is logged in and user is a member behaves like empty wiki message shows the empty state message with the expected elements
Got 0 failures and 2 other errors:
Shared Example Group: "empty wiki message" called from ./ee/spec/features/groups/wiki/user_views_wiki_empty_spec.rb:36
Shared Example Group: "User views empty wiki" called from ./ee/spec/features/groups/wiki/user_views_wiki_empty_spec.rb:16
1.1) Failure/Error: if @user.save(validate: validate) && update_status
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_details_pkey"
DETAIL: Key (user_id)=(348) already exists.
# ./app/services/users/update_service.rb:26:in `execute'
# ./app/models/user.rb:89:in `block (2 levels) in update_tracked_fields!'
# ./app/models/ability.rb:108:in `forgetting'
# ./app/models/user.rb:88:in `block in update_tracked_fields!'
# ./lib/gitlab/exclusive_lease.rb:60:in `throttle'
# ./app/models/user.rb:87:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:50:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:21:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:21:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:33:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:74:in `call'
# ------------------
# --- Caused by: ---
# PG::UniqueViolation:
# ERROR: duplicate key value violates unique constraint "user_details_pkey"
# DETAIL: Key (user_id)=(348) already exists.
# ./app/services/users/update_service.rb:26:in `execute'
This appears to be due to an attempt to save a new user_details
object without checking for the existence of the existing one.
~bug