Fix branch loading timeout
What does this MR do?
Optimizes the Ci::Pipeline#latest_successful_for_refs
method so that the branches page no longer times out.
The previous implementation loaded the 100 most recent successful pipelines for the specified refs then iterated over them and returned the latest ones. This was very inefficient.
The current implementation loads the most recent pipelines via SQL instead of filtering them in memory, which is much faster.
Related #337109 (closed)
How to setup and validate locally (strongly suggested)
- Open a project with a lot of branches
- Open the branches page
- It does not time out
Does this MR meet the acceptance criteria?
Conformity
-
I have included changelog trailers, or none are needed. (Does this MR need a changelog?) -
I have added/updated documentation, or it's not needed. (Is documentation required?) -
I have properly separated EE content from FOSS, or this MR is FOSS only. (Where should EE code go?) -
I have added information for database reviewers in the MR description, or it's not needed. (Does this MR have database related changes?) -
I have self-reviewed this MR per code review guidelines. -
This MR does not harm performance, or I have asked a reviewer to help assess the performance impact. (Merge request performance guidelines) -
I have followed the style guides. -
This change is backwards compatible across updates, or this does not apply.
Edited by Matija Čupić