Skip to content

Speed up EE project helpers by using let_it_be for project factory

Peter Leitzen requested to merge pl-speedup-project-helper into master

What does this MR do?

This MR improves the performance of EE project helpers by using let_it_be where feasible.

Contributes to #251358 (closed) and https://gitlab.com/gitlab-org/plan/-/issues/145.

Here's the output from test-prof when run with FPROF=1. Note:

  • Total amount of factories created went down from 146 to 31 🚀
  • Total events went down from 4155 to 964
  • Queries saved: 3191

Before

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:07.044 of 00:27.130 (25.97%)
Total events: 4155

Top 5 slowest suites (by time):

ProjectsHelper (./ee/spec/helpers/projects_helper_spec.rb:5) – 00:07.044 (4155 / 58) of 00:27.130 (25.97%)



Finished in 34.74 seconds (files took 4.64 seconds to load)
58 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 146
 Total top-level: 84
 Total time: 13.6880s
 Total uniq factories: 8

   total   top-level     total time      time per call      top-level time               name

      55          55       12.0875s            0.2198s            12.0875s            project
      55           0        3.0106s            0.0547s             0.0000s          namespace
      25          23        1.1200s            0.0448s             1.0520s               user
       3           3        0.1365s            0.0455s             0.1365s              group
       3           0        0.0143s            0.0048s             0.0000s namespace_settings
       2           2        0.3881s            0.1941s             0.3881s      vulnerability
       2           0        0.0959s            0.0480s             0.0000s             author
       1           1        0.0238s            0.0238s             0.0238s            license

After

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:01.748 of 00:16.652 (10.5%)
Total events: 964

Top 5 slowest suites (by time):

ProjectsHelper (./ee/spec/helpers/projects_helper_spec.rb:5) – 00:01.748 (964 / 58) of 00:16.652 (10.5%)



Finished in 24.19 seconds (files took 4.65 seconds to load)
58 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 31
 Total top-level: 20
 Total time: 3.5695s
 Total uniq factories: 8

   total   top-level     total time      time per call      top-level time               name

      12          10        0.5937s            0.0495s             0.5192s               user
       4           4        2.5260s            0.6315s             2.5260s            project
       4           0        0.4980s            0.1245s             0.0000s          namespace
       3           3        0.1694s            0.0565s             0.1694s              group
       3           0        0.0168s            0.0056s             0.0000s namespace_settings
       2           2        0.3327s            0.1664s             0.3327s      vulnerability
       2           0        0.1221s            0.0611s             0.0000s             author
       1           1        0.0221s            0.0221s             0.0221s            license

Does this MR meet the acceptance criteria?

Conformity

Edited by Peter Leitzen

Merge request reports