this comment describes performance issue related to many downstream/upstream projects, nested views and a large number of jobs.
The jenkins environment includes:
- 1200 jobs,
- sectioned view "TRUNK_VIEW" containing 16 sections,
- a job "exampe_job" has 118 downstream projects,
- sectioned view plug-in,
- rule strategy plug-in.
When an "example_job" starts to create a view "jenkins/view/TRUNK_VIEW/job/example_job"
it creates links for every downstream and upstream projects:
When a link for downstream_project with "TRUNK_VIEW" view is created following steps are performed:
1) Method hudson.Functions.getRelativeLinkTo. This method checks if a view contains a downstream project and creates a link.
2) Method hudson.plugins.sectioned_view.SectionedView.getItems -> hudson.plugins.sectioned_view.SectionedViewSection.getItems
This method gets all items for every view section.
3) jenkins.model.Jenkins.getItems - gets all items
Check permission for every item.
In this case unfortunately, the last step is repeated 2265600 times and consumes a lot of memory and processor time. This happens because 118 * 16 * 1200 = 2265600 (donwstream projects * sections * all jobs). Besides, a rule strategy plug-in creates a few objects which is not an issue for 1 item but it is an issue for 2265600 items.