Optimize AvailableLabelsService for multiple labels
What does this MR do?
PUT /api/:version/groups/:id/(-/)epics/:epic_iid executes almost 100 queries, in case of failing test particulart number is 118
This is a subset of changes required to optimize this endpoint. The change made in this MR is optimizing AvailableLabelsService
and Labels::FindOrCreateService
to not query multiple times labels by passing label titles to the scope.
Before:
PUT /api/:version/groups/:id/(-/)epics/:epic_iid(.:format): a maximum of 110 is allowed but 118 SQL queries were executed
After:
PUT /api/:version/groups/:id/(-/)epics/:epic_iid(.:format): a maximum of 110 is allowed but 113 SQL queries were executed
From 118 SQL to 113. -5 queries for example with 6 labels in params. With more labels, we'll get more impressive results.
Screenshots (strongly suggested)
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 #194104 (closed)
Edited by Andy Schoenen