Delete all label links asynchronously when issuable gets destroyed [RUN ALL RSPEC] [RUN AS-IF-FOSS]
What does this MR do?
This is based on the solution we created in !57830 (merged) to improve the performance of the Issuable::DestroyService
.
Previously, the associated label_links
to an Issuable (can be a MergeRequest, Issue or Epic) gets destroyed when an issuable gets destroyed. If there are 100 label links, that means 100 delete SQL queries as well.
With this fix, the deletion will be done in batches. It's being done in batches to avoid statement timeouts in case there are a lot of label links to be deleted.
The worker will be performed asynchronously when the feature flag is enabled.
Queries
LabelLink
select query
SELECT "label_links"."id"
FROM "label_links"
WHERE "label_links"."target_id" = 97750198
AND "label_links"."target_type" = 'MergeRequest'
LIMIT 100
Query plan: https://explain.depesz.com/s/9KxT Postgres.ai: https://postgres.ai/console/gitlab/gitlab-production-tunnel/sessions/3977/commands/13694
DELETE query
DELETE FROM label_links
WHERE id IN (
SELECT "label_links"."id"
FROM "label_links"
WHERE "label_links"."target_id" = 97750198
AND "label_links"."target_type" = 'MergeRequest'
LIMIT 100
)
Query plan: https://explain.depesz.com/s/h18a Postgres.ai: https://postgres.ai/console/gitlab/gitlab-production-tunnel/sessions/3977/commands/13695
Does this MR meet the acceptance criteria?
Conformity
-
📋 Does this MR need a changelog?-
I have included a changelog entry. -
I have not included a changelog entry because _____.
-
-
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team
Related to #325689 (closed)