Skip to content

Speed up pipeline model specs

Allison Browne requested to merge pipeline-spec-improvements into master

What does this MR do?

Improves execution speed of the pipeline model spec by around ~20 seconds, mostly by handling pipeline creation in each context.

We don't need to create an additional pipelines for some specs via a top level let(which creates a new record for each spec) for instance, in validation specs.

Other specs can take advantage of let_it_be, let_it_be_with_reload, build or build_stubbed particular to the circumstance.

[TEST PROF INFO] Factories usage

 Total: 1346
 Total top-level: 1206
 Total time: 51.1960s
 Total uniq factories: 30

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

     402         402        8.0644s            0.0201s             8.0644s  ci_empty_pipeline
     239         227        8.1034s            0.0339s             7.8745s        ci_pipeline
     221         217        8.5415s            0.0386s             8.3380s           ci_build
      88          22        2.2175s            0.0252s             0.3552s    ci_job_artifact
      58          57       13.2336s            0.2282s            12.7119s      merge_request
      58          37        1.2916s            0.0223s             0.3942s ci_sources_pipeline
      57          56        8.4317s            0.1479s             8.3229s            project
      47          26        0.8719s            0.0186s             0.5753s          ci_bridge
      38          38        0.5926s            0.0156s             0.5926s generic_commit_status
      32          32        0.3426s            0.0107s             0.3426s      commit_status
      29          26        1.7865s            0.0616s             1.6657s               user
      16          16        0.1605s            0.0100s             0.1605s              label
       8           8        0.3707s            0.0463s             0.3707s          namespace
       8           8        0.0408s            0.0051s             0.0408s    ci_stage_entity
       8           8        0.2193s            0.0274s             0.2193s          milestone
       7           7        0.2475s            0.0354s             0.2475s       project_hook
       5           5        0.1809s            0.0362s             0.1809s              group
       5           0        0.0304s            0.0061s             0.0000s namespace_settings
       4           4        0.1729s            0.0432s             0.1729s merge_request_diff
       4           4        0.0232s            0.0058s             0.0232s merge_request_diff_commit
       3           1        0.4230s            0.1410s             0.3253s            cluster
       1           1        0.0366s            0.0366s             0.0366s          ci_runner
       1           1        0.0210s            0.0210s             0.0210s external_pull_request
       1           1        0.0811s            0.0811s             0.0811s ci_trigger_request
       1           0        0.0659s            0.0659s             0.0000s         ci_trigger
       1           0        0.0454s            0.0454s             0.0000s              owner
       1           0        0.0628s            0.0628s             0.0000s cluster_provider_gcp
       1           0        0.0646s            0.0646s             0.0000s cluster_platform_kubernetes
       1           1        0.0678s            0.0678s             0.0678s pipelines_email_service
       1           1        0.0112s            0.0112s             0.0112s            license
[TEST PROF INFO] Factories usage

 Total: 986
 Total top-level: 846
 Total time: 34.8263s
 Total uniq factories: 30

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

     241         229        6.6360s            0.0275s             6.4176s        ci_pipeline
     221         217        7.9168s            0.0358s             7.7790s           ci_build
      91          91        1.4490s            0.0159s             1.4490s  ci_empty_pipeline
      88          22        1.6949s            0.0193s             0.2685s    ci_job_artifact
      58          37        0.3929s            0.0068s             0.3004s ci_sources_pipeline
      54          53       10.3770s            0.1922s             9.9439s      merge_request
      47          26        0.6815s            0.0145s             0.4323s          ci_bridge
      45          44        5.5440s            0.1232s             5.4476s            project
      38          38        0.4680s            0.0123s             0.4680s generic_commit_status
      32          32        0.4395s            0.0137s             0.4395s      commit_status
      15          12        0.6161s            0.0411s             0.4865s               user
       8           8        0.0625s            0.0078s             0.0625s    ci_stage_entity
       8           8        0.3041s            0.0380s             0.3041s          namespace
       7           7        0.2283s            0.0326s             0.2283s       project_hook
       5           5        0.1111s            0.0222s             0.1111s              group
       5           0        0.0184s            0.0037s             0.0000s namespace_settings
       4           4        0.0200s            0.0050s             0.0200s merge_request_diff_commit
       4           4        0.1037s            0.0259s             0.1037s merge_request_diff
       3           1        0.4327s            0.1442s             0.3160s            cluster
       2           2        0.0416s            0.0208s             0.0416s              label
       1           1        0.0322s            0.0322s             0.0322s          ci_runner
       1           1        0.0260s            0.0260s             0.0260s          milestone
       1           1        0.0167s            0.0167s             0.0167s external_pull_request
       1           1        0.0646s            0.0646s             0.0646s ci_trigger_request
       1           0        0.0509s            0.0509s             0.0000s         ci_trigger
       1           0        0.0355s            0.0355s             0.0000s              owner
       1           0        0.0663s            0.0663s             0.0000s cluster_provider_gcp
       1           0        0.0814s            0.0814s             0.0000s cluster_platform_kubernetes
       1           1        0.0582s            0.0582s             0.0582s pipelines_email_service
       1           1        0.0091s            0.0091s             0.0091s            license

Screenshots (strongly suggested)

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 Allison Browne

Merge request reports