Skip to content

Speed up projects merge requests controller EE specs

Peter Leitzen requested to merge pl-spec-ee-controller-projects-mr-perf into master

What does this MR do?

This MR improves the performance of EE project merge requests controller specs by using let_it_be where feasible.

Related to &3752.

Contributes to 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 761 to 381 🚀
  • Total events went down from 33912 to 21874
  • Queries saved: 12038

Before

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:47.250 of 02:05.694 (37.59%)
Total events: 33912

Top 5 slowest suites (by time):

Projects::Mer...estsController (./ee/spec/controllers/projects/merge_requests_controller_spec.rb:50) – 00:47.250 (33912 / 148) of 02:05.694 (37.59%)



Finished in 2 minutes 13.3 seconds (files took 1.7 seconds to load)
148 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 761
 Total top-level: 544
 Total time: 76.7503s
 Total uniq factories: 14

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

     179         166       34.0923s            0.1905s            31.8702s            project
     159         149        6.8935s            0.0434s             6.4739s               user
     150           0        7.4691s            0.0498s             0.0000s          namespace
      82          82       19.1385s            0.2334s            19.1385s   ee_merge_request
      61          50       11.0227s            0.1807s             7.7718s      merge_request
      30          29        0.9882s            0.0329s             0.9581s              group
      30           0        0.1498s            0.0050s             0.0000s namespace_settings
      26          26        5.7746s            0.2221s             5.7746s merge_request_with_diffs
      25          25        0.3768s            0.0151s             0.3768s approval_merge_request_rule
      10          10        3.4354s            0.3435s             3.4354s           approval
       5           5        0.5408s            0.1082s             0.5408s description_version
       2           0        0.4975s            0.2487s             0.0000s              issue
       1           1        0.0082s            0.0082s             0.0082s            license
       1           1        0.4019s            0.4019s             0.4019s     approver_group

After

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:30.870 of 01:28.052 (35.06%)
Total events: 21874

Top 5 slowest suites (by time):

Projects::Mer...estsController (./ee/spec/controllers/projects/merge_requests_controller_spec.rb:50) – 00:30.870 (21874 / 148) of 01:28.052 (35.06%)



Finished in 1 minute 34.64 seconds (files took 1.66 seconds to load)
148 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 381
 Total top-level: 260
 Total time: 36.2615s
 Total uniq factories: 14

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

      83          70       16.0522s            0.1934s            12.2378s            project
      65          55        3.1525s            0.0485s             2.6440s               user
      61          50       15.0836s            0.2473s             9.0741s      merge_request
      54           0        2.6877s            0.0498s             0.0000s          namespace
      30          29        1.0025s            0.0334s             0.9636s              group
      30           0        0.1581s            0.0053s             0.0000s namespace_settings
      25          25        0.3905s            0.0156s             0.3905s approval_merge_request_rule
      11          11        2.9347s            0.2668s             2.9347s   ee_merge_request
      10          10        6.2678s            0.6268s             6.2678s           approval
       5           5        0.5435s            0.1087s             0.5435s description_version
       3           3        0.7281s            0.2427s             0.7281s merge_request_with_diffs
       2           0        0.4999s            0.2500s             0.0000s              issue
       1           1        0.0096s            0.0096s             0.0096s            license
       1           1        0.4679s            0.4679s             0.4679s     approver_group

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

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
Edited by Peter Leitzen

Merge request reports