Skip to content

Fix timeouts when destroying a project with many notes

What does this MR do?

Generally, we like to use foreign key associations to destroy dependent records. Where this is possible, it's faster and uses fewer resources than doing it in GitLab.

In 028db84c , the notes association was converted from dependent: :destroy to using foreign keys. However, when destroying a specific project with > 60K notes, we're experiencing statement timeouts in the staging environment. Additionally, notes have a deprecated attachments uploader that requires Ruby intervention to avoid orphaning files on disk - there are at least some notes on GitLab.com that still use this deprecated uploader.

Since 2017, we've introduced the BatchDestroyDependentAssociations concern, which takes care of processing large numbers of dependent records in batches. Re-introducing dependent: :destroy on notes will automatically make use of this code.

Screenshots (strongly suggested)

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Related to #207222 (closed)

Edited by Nick Thomas

Merge request reports