Use parent strategy for associations in factories
Problem
After upgrading to FactoryBot 5.1.0 in !17941 (merged) we had to disable the parent strategy from being used via FactoryBot.use_parent_strategy = false
(see https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#build-strategies-1).
It seems (see CI failures in !40274 (merged)) we cannot enable the parent strategy easily. Enabling this feature might safe us some SQL queries (see https://gitlab.com/gitlab-org/plan/-/issues/145), however.
Solution
Let FactoryBot's associations to use the same build strategy for their parent object by removing the above mentioned configuration FactoryBot.use_parent_strategy = false
.
Fix all failing specs.
Example
When with parent strategy used running spec/models/project_spec.rb
safes us 1248 SQL queries:
Before
Total time: 01:51.476 of 04:32.996 (40.83%)
Total events: 76360
Top 5 slowest suites (by time):
Project (./spec/models/project_spec.rb:5) – 01:51.476 (76360 / 1015) of 04:32.996 (40.83%)
Finished in 4 minutes 40 seconds (files took 2.49 seconds to load)
1015 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 2528
Total top-level: 1587
Total time: 176.6419s
Total uniq factories: 67
total top-level total time time per call top-level time name
760 724 139.4697s 0.1835s 132.4266s project
670 92 30.1227s 0.0450s 4.1564s namespace
474 266 22.9360s 0.0484s 12.4376s user
131 127 4.0226s 0.0307s 3.8843s group
56 0 0.8467s 0.0151s 0.0000s ci_job_artifact
43 42 1.1256s 0.0262s 1.0862s ci_pipeline
29 28 1.8591s 0.0641s 1.8290s ci_build
27 27 0.2849s 0.0106s 0.2849s ci_variable
27 27 3.3212s 0.1230s 3.3212s merge_request
16 16 0.1223s 0.0076s 0.1223s lfs_object
16 16 0.5053s 0.0316s 0.5053s note_on_commit
15 15 3.1873s 0.2125s 3.1873s project_member
14 10 1.2857s 0.0918s 1.0461s cluster
13 13 0.3592s 0.0276s 0.3592s ci_runner
12 12 0.0854s 0.0071s 0.0854s lfs_objects_project
12 12 0.4965s 0.0414s 0.4965s issue
11 0 0.2767s 0.0252s 0.0000s package_file
11 10 0.3746s 0.0341s 0.1429s environment
10 0 0.1617s 0.0162s 0.0000s conan_package_file
10 0 0.0536s 0.0054s 0.0000s conan_file_metadatum
9 9 0.1130s 0.0126s 0.1130s ci_empty_pipeline
9 3 1.8141s 0.2016s 0.7068s label
9 9 0.0985s 0.0109s 0.0985s project_auto_devops
8 8 0.0449s 0.0056s 0.0449s upload
8 8 0.4664s 0.0583s 0.4664s project_export_job
7 7 0.1490s 0.0213s 0.1490s deploy_token
6 6 1.1545s 0.1924s 1.1545s jira_import_state
6 6 0.1285s 0.0214s 0.1285s protected_branch
6 6 0.1466s 0.0244s 0.1466s prometheus_service
5 5 0.1456s 0.0291s 0.1456s service
5 5 0.0353s 0.0071s 0.0353s import_state
5 5 0.0837s 0.0167s 0.0837s group_badge
5 5 0.3230s 0.0646s 0.3230s chat_name
4 0 0.1350s 0.0338s 0.0000s issue_tracker_data
4 4 0.0356s 0.0089s 0.0356s project_repository
4 4 0.0143s 0.0036s 0.0143s shard
4 4 0.3025s 0.0756s 0.3025s cluster_platform_kubernetes
4 4 0.2648s 0.0662s 0.2648s ci_instance_variable
4 4 0.0353s 0.0088s 0.0353s deploy_keys_project
4 4 1.4899s 0.3725s 1.4899s project_hook
4 4 0.2093s 0.0523s 0.2093s project_badge
3 3 1.1529s 0.3843s 1.1529s redmine_project
3 0 0.7231s 0.2410s 0.0000s redmine_service
3 3 0.0196s 0.0065s 0.0196s service_desk_setting
3 3 0.3990s 0.1330s 0.3990s deploy_key
3 3 0.1648s 0.0549s 0.1648s npm_package
2 2 0.5879s 0.2939s 0.5879s maven_package
2 0 0.4602s 0.2301s 0.0000s maven_metadatum
2 0 0.4430s 0.2215s 0.0000s package
2 2 0.0549s 0.0274s 0.0549s npm_package
2 2 0.5066s 0.2533s 0.5066s conan_package
2 0 0.3285s 0.1643s 0.0000s conan_metadatum
2 0 0.3145s 0.1573s 0.0000s conan_package
2 2 0.0864s 0.0432s 0.0864s event
2 2 0.4551s 0.2276s 0.4551s prometheus_project
2 2 0.0449s 0.0224s 0.0449s protected_tag
2 2 0.2570s 0.1285s 0.2570s project_empty_repo
2 2 0.0257s 0.0128s 0.0257s system_hook
2 2 0.3627s 0.1813s 0.3627s slack_service
2 2 0.4686s 0.2343s 0.4686s pool_repository
2 2 0.0640s 0.0320s 0.0640s alerts_service
1 1 0.0065s 0.0065s 0.0065s license
1 1 0.0698s 0.0698s 0.0698s container_expiration_policy
1 1 0.0127s 0.0127s 0.0127s container_repository
1 1 0.0637s 0.0637s 0.0637s lfs_file_lock
1 1 0.0780s 0.0780s 0.0780s custom_issue_tracker_service
1 1 0.4425s 0.4425s 0.4425s deployment
After
Total time: 01:35.251 of 03:56.954 (40.2%)
Total events: 75112
Top 5 slowest suites (by time):
Project (./spec/models/project_spec.rb:5) – 01:35.251 (75112 / 1015) of 03:56.954 (40.2%)
Finished in 4 minutes 3.7 seconds (files took 40.23 seconds to load)
1015 examples, 0 failures
[TEST PROF INFO] Factories usage
Total: 2444
Total top-level: 1509
Total time: 153.3869s
Total uniq factories: 67
total top-level total time time per call top-level time name
757 724 123.1303s 0.1627s 116.6218s project
592 17 25.5532s 0.0432s 0.9548s namespace
474 266 18.2324s 0.0385s 9.9789s user
131 127 3.8661s 0.0295s 3.7637s group
56 0 0.6584s 0.0118s 0.0000s ci_job_artifact
43 42 1.1878s 0.0276s 1.1602s ci_pipeline
29 28 1.6175s 0.0558s 1.5906s ci_build
27 27 0.2021s 0.0075s 0.2021s ci_variable
27 27 2.6921s 0.0997s 2.6921s merge_request
16 16 0.1191s 0.0074s 0.1191s lfs_object
16 16 0.5110s 0.0319s 0.5110s note_on_commit
15 15 3.4957s 0.2330s 3.4957s project_member
14 10 0.8507s 0.0608s 0.6969s cluster
13 13 0.3013s 0.0232s 0.3013s ci_runner
12 12 0.0876s 0.0073s 0.0876s lfs_objects_project
12 12 0.6393s 0.0533s 0.6393s issue
11 0 0.2766s 0.0251s 0.0000s package_file
11 10 0.5303s 0.0482s 0.1257s environment
10 0 0.1929s 0.0193s 0.0000s conan_package_file
10 0 0.0637s 0.0064s 0.0000s conan_file_metadatum
9 9 0.1176s 0.0131s 0.1176s ci_empty_pipeline
9 9 0.0941s 0.0105s 0.0941s project_auto_devops
8 8 0.0338s 0.0042s 0.0338s upload
8 8 0.8272s 0.1034s 0.8272s project_export_job
7 7 0.1437s 0.0205s 0.1437s deploy_token
6 6 1.1097s 0.1850s 1.1097s jira_import_state
6 0 1.0651s 0.1775s 0.0000s label
6 6 0.1146s 0.0191s 0.1146s protected_branch
6 6 0.2975s 0.0496s 0.2975s prometheus_service
5 5 0.0761s 0.0152s 0.0761s service
5 5 0.0300s 0.0060s 0.0300s import_state
5 5 0.0747s 0.0149s 0.0747s group_badge
5 5 0.2916s 0.0583s 0.2916s chat_name
4 0 0.1802s 0.0451s 0.0000s issue_tracker_data
4 4 0.0371s 0.0093s 0.0371s project_repository
4 4 0.0137s 0.0034s 0.0137s shard
4 4 0.2928s 0.0732s 0.2928s cluster_platform_kubernetes
4 4 0.0819s 0.0205s 0.0819s ci_instance_variable
4 4 0.0271s 0.0068s 0.0271s deploy_keys_project
4 4 0.6592s 0.1648s 0.6592s project_hook
4 4 0.0715s 0.0179s 0.0715s project_badge
3 3 1.5483s 0.5161s 1.5483s redmine_project
3 0 0.9638s 0.3213s 0.0000s redmine_service
3 3 0.0172s 0.0057s 0.0172s service_desk_setting
3 3 0.2352s 0.0784s 0.2352s deploy_key
3 3 0.0531s 0.0177s 0.0531s npm_package
2 2 0.5448s 0.2724s 0.5448s maven_package
2 0 0.3117s 0.1559s 0.0000s maven_metadatum
2 0 0.2937s 0.1468s 0.0000s package
2 2 0.0651s 0.0325s 0.0651s npm_package
2 2 0.6669s 0.3335s 0.6669s conan_package
2 0 0.4578s 0.2289s 0.0000s conan_metadatum
2 0 0.4441s 0.2221s 0.0000s conan_package
2 2 0.1058s 0.0529s 0.1058s event
2 2 0.3469s 0.1735s 0.3469s prometheus_project
2 2 0.0374s 0.0187s 0.0374s protected_tag
2 2 0.4056s 0.2028s 0.4056s project_empty_repo
2 2 0.0341s 0.0170s 0.0341s system_hook
2 2 0.6578s 0.3289s 0.6578s slack_service
2 2 0.5578s 0.2789s 0.5578s pool_repository
2 2 0.0565s 0.0283s 0.0565s alerts_service
1 1 0.0062s 0.0062s 0.0062s license
1 1 0.0986s 0.0986s 0.0986s container_expiration_policy
1 1 0.0101s 0.0101s 0.0101s container_repository
1 1 0.0488s 0.0488s 0.0488s lfs_file_lock
1 1 0.0722s 0.0722s 0.0722s custom_issue_tracker_service
1 1 0.4835s 0.4835s 0.4835s deployment
List of commits to be cherry-picked
List of commits from !40274 (merged) with fixes to each spec affected by these changes. They should be split into individual MRs.
-
fb2078d5 Fix environment spec -
47b3a49f Fix note spec -
bee94145 Fix resource label event spec -
4f0e86dd Fix merge request spec -
ad5ba6c0 Fix deployment spec -
a49d1efa Fix error tracking list projects service spec -
50e7578d Fix ci reports test case spec -
fe9bd0b7 Fix remote mirror spec -
f7dbcf48 Fix notes create service spec -
a4a83433 Fix package spec -
18125790 Fix project badge spec -
77427f47 Fix x509 certificate spec -
a3df82d1 Fix positional note specs -
b9e0cd7b Fix event spec -
5df20dd4 Fix factory hooks when building -
020a7d23 Fix deployment spec -
043a3957 Fix update project statistic specs -
d3eab289 Fix test case entity spec -
f4a5177d Fix event spec -
dfd8dd21 Fix kubernetes namespace spec -
499b6d40 Fix membership factories -
2c7cbed0 Fix quick actions service spec -
e5f47e7e Fix geo_repository_created_event specs -
5c92c7d2 Fix ci subscriptions project spec -
71c04417 Fix protected ref access spec -
a8f95ec9 Fix elasticsearch indexed containers specs -
fbf7e47a Fix project import data spec -
5def1481 Fix vulnerability feedback spec -
17a878ab Provide a user when building project mirror -
4c70d15f Provide persisted models for bulk insert specs -
a1302335 Fix personal access token policy spec -
8b3d2676 Fix usage of suggestion factory -
63bd585f Provide namespace when building project statistics -
f7831e47 Set pipeline CI ref in before(:create) -
5bd2f2c8 Fix user interacted project spec -
2c83bf5c Fix user agent detail spec -
62ebed02 Fix services factory -
ea9d576a Fix service factory -
caad2203 Fix pipeline factory -
3163fcce Pass fake diff refs by building a commit