Find IndexStatus find_or_create race condition
**TL;DR** Fix a race condition where `IndexStatus` is not created and does not raise error. Need to use `!` and get rid of problematic unique model validation. Looking at the code I notice a logical problem with using `find_or_create_by` alongside a unique model validation. The problem is a race condition which comes from `find_or_create` first checking to see if the record exists. If it does not it tries creating which then invokes the validation which checks again to see if the record exists which finally returns a validation error. But see here we are not using `!` version of `find_or_create` and so this validation error is silently ignored. Since we already have a [`safe_find_or_create_by!`]( https://gitlab.com/gitlab-org/gitlab/-/blob/2b01f1f3420d9177e27418df063aad2e1bda1216/app/models/application_record.rb#L37 ) which is designed for handling this race condition using unique indexes and rescue and seeing that this model already has the [unique index]( https://gitlab.com/gitlab-org/gitlab/-/blob/2b01f1f3420d9177e27418df063aad2e1bda1216/db/structure.sql#L19266 ) we should just get rid of the model validation since it just complicates the error handling. Since this is a pretty weird race condition it seems tricky/contrived to try to create a proper unit test for this case.
Showing
Please register or sign in to comment