Skip to content

Improve performance of blob policy spec

Peter Leitzen requested to merge pl-spec-blob-policy-perf into master

What does this MR do and why?

This MR improves performance for blob policy spec by using let_it_be_with_reload combined with update! to avoid repetitive project factory creations.

RSpec Profiling

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

  • Total amount of factories created went down from 119 to 37 🚀
  • Total events went down from 5383 to 2511
  • Queries saved: 2872

Before

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:13.777 of 00:34.404 (40.05%)
Total events: 5383

Top 5 slowest suites (by time):

BlobPolicy (./spec/policies/blob_policy_spec.rb:5) – 00:13.777 (5383 / 42) of 00:34.404 (40.05%)



Finished in 46.38 seconds (files took 16.1 seconds to load)
42 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 119
 Total top-level: 77
 Total time: 00:28.657 (out of 00:58.535)
 Total uniq factories: 4

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

      42          42       24.4834s            0.5829s            24.4834s            project
      42           0        6.9447s            0.1653s             0.0000s          namespace
      34          34        4.1659s            0.1225s             4.1659s               user
       1           1        0.0082s            0.0082s             0.0082s            license

After

[TEST PROF INFO] EventProf results for sql.active_record

Total time: 00:06.227 of 00:19.857 (31.36%)
Total events: 2511

Top 5 slowest suites (by time):

BlobPolicy (./spec/policies/blob_policy_spec.rb:5) – 00:06.227 (2511 / 42) of 00:19.857 (31.36%)



Finished in 31.18 seconds (files took 15.81 seconds to load)
42 examples, 0 failures

[TEST PROF INFO] Factories usage

 Total: 37
 Total top-level: 36
 Total time: 00:10.541 (out of 00:43.007)
 Total uniq factories: 4

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

      34          34        4.6442s            0.1366s             4.6442s               user
       1           1        0.0143s            0.0143s             0.0143s            license
       1           1        5.8826s            5.8826s             5.8826s            project
       1           0        0.3638s            0.3638s             0.0000s          namespace

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Peter Leitzen

Merge request reports