Load project members, group members in bulk and cache it
What does this MR do?
On the Move dropdown on the edit issue page we introduced infinite scrolling to just return a limited number of projects, 50 items. So if the user can move the issue to 50 or more items when scroll down on the list a new set of projects will be requested to the server.
Are there points in the code the reviewer needs to double check?
As the list of projects is filtered with ruby from a first result set that is get using SQL, we tried to improve that filtering because execute a lot of queries (see screenshots of Sheerlock) preloading some data (to avoid those queries).
As we have infinite scrolling, when we receive and offset_id (which correspond with the last project id returned to that dropdown and stored on web browser), we skip the sql list of project until that point and start filtering from there (so we avoid all the queries for projects we're not going to return) and we filter projects until we reach the end of the list or we have a whole new page (50 items). We use a lazy
enumerator to only filter what we need
Why was this MR needed?
See #17932 (closed)
What are the relevant issue numbers?
Closes #17932 (closed)
Screenshots (if relevant)
These are some tests I did on my local machine with an user with 27 authorized projects (19 belonging to a the same group). I cannot profile these on staging because there are a lot of changes related with the project_team class that are not yet on staging.
Current local master (59ce1af5)
Plain MR (!5686 (merged))
This MR I'll push for review but the implementation is ugly
Does this MR meet the acceptance criteria?
-
CHANGELOG entry added -
Documentation created/updated -
API support added - Tests
-
Added for this feature/bug -
All builds are passing
-
-
Conform by the style guides -
Branch has no merge conflicts with master
(if you do - rebase it please) -
Squashed related commits together