Update usage ping data to track projects with overridden approval rules
requested to merge 222313-update-usage-ping-data-to-track-projects-with-can-override-approvals-in-merge-request into master
What does this MR do?
It adds two new usage ping data to answer the following question.
How many projects have the
Can override approvals in merge request
option enabled/disabled?
Optimization
CREATE INDEX idx_projects_id_disable_overriding_approvers_created_at ON public.projects USING btree (id, disable_overriding_approvers_per_merge_request, created_at);
-- The query has been executed. Duration: 26.210 s
For "disable_overriding_approvers_per_merge_request" = TRUE without timeperiod
SELECT MIN("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE
https://explain.depesz.com/s/HIRN
Before:https://explain.depesz.com/s/GBk2
After:SELECT MAX("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE
https://explain.depesz.com/s/2B3u
Before:https://explain.depesz.com/s/5N4e
After:SELECT COUNT("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE AND "projects"."id" BETWEEN 0 AND 99999
https://explain.depesz.com/s/t5U3
Before:https://explain.depesz.com/s/vjRN
After:For "disable_overriding_approvers_per_merge_request" = TRUE with time_period
SELECT MIN("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE AND "projects"."created_at" BETWEEN '2020-05-28 10:50:15.288686' AND '2020-06-25 10:50:15.288758'
https://explain.depesz.com/s/YlzV
Before:https://explain.depesz.com/s/8yA5
After:SELECT MAX("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE AND "projects"."created_at" BETWEEN '2020-05-28 10:50:15.288686' AND '2020-06-25 10:50:15.288758'
https://explain.depesz.com/s/cGVh
Before:https://explain.depesz.com/s/XfKB
After:SELECT COUNT("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE AND "projects"."created_at" BETWEEN '2020-05-28 10:50:15.288686' AND '2020-06-25 10:50:15.288758' AND "projects"."id" BETWEEN 0 AND 99999
https://explain.depesz.com/s/g9Tn
Before:https://explain.depesz.com/s/XEvi
After:For "disable_overriding_approvers_per_merge_request" = FALSE OR IS NULL without time_period
SELECT MIN("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL)
https://explain.depesz.com/s/4i6C
Before:https://explain.depesz.com/s/f24A
After:SELECT MAX("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL)
https://explain.depesz.com/s/YHKa
Before:https://explain.depesz.com/s/jTXF3
After:SELECT COUNT("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL) AND "projects"."id" BETWEEN 1 AND 100000
https://explain.depesz.com/s/Nhr2
Before:https://explain.depesz.com/s/s4Sp
After:For "disable_overriding_approvers_per_merge_request" = FALSE OR IS NULL with time_period
SELECT MIN("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL) AND "projects"."created_at" BETWEEN '2020-05-28 10:49:45.958485' AND '2020-06-25 10:49:45.958580'
https://explain.depesz.com/s/F8hHp
Before:https://explain.depesz.com/s/SGScQ
After:SELECT MAX("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL) AND "projects"."created_at" BETWEEN '2020-05-28 10:49:45.958485' AND '2020-06-25 10:49:45.958580'
https://explain.depesz.com/s/fHdh
Before:https://explain.depesz.com/s/bgJw
After:SELECT COUNT("projects"."id") FROM "projects" WHERE ("projects"."disable_overriding_approvers_per_merge_request" = FALSE OR "projects"."disable_overriding_approvers_per_merge_request" IS NULL) AND "projects"."created_at" BETWEEN '2020-05-28 10:49:45.958485' AND '2020-06-25 10:49:45.958580' AND "projects"."id" BETWEEN 0 AND 99999
https://explain.depesz.com/s/UWEww
Before:https://explain.depesz.com/s/Zxtl
After:Migration Output
$ VERBOSE=true bundle exec rake db:migrate == 20200626060151 AddDisableOverridingApproversPerMergeRequest: migrating =====
-- transaction_open?()
-> 0.0000s
-- index_exists?(:projects, [:id, :disable_overriding_approvers_per_merge_request, :created_at], {:name=>"idx_projects_id_disable_overriding_approvers_created_at", :algorithm=>:concurrently})
-> 0.0144s
-- add_index(:projects, [:id, :disable_overriding_approvers_per_merge_request, :created_at], {:name=>"idx_projects_id_disable_overriding_approvers_created_at", :algorithm=>:concurrently})
-> 0.0044s
== 20200626060151 AddDisableOverridingApproversPerMergeRequest: migrated (0.0192s)
$ VERBOSE=true bundle exec rake db:migrate:down VERSION=20200626060151
== 20200626060151 AddDisableOverridingApproversPerMergeRequest: reverting =====
-- transaction_open?()
-> 0.0000s
-- indexes(:projects)
-> 0.0145s
-- remove_index(:projects, {:algorithm=>:concurrently, :name=>"idx_projects_id_disable_overriding_approvers_created_at"})
-> 0.0022s
== 20200626060151 AddDisableOverridingApproversPerMergeRequest: reverted (0.0171s)
Conformity
-
Changelog entry - [-] Documentation (if required)
-
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers - [-] Informed Infrastructure department of a default or new setting change, if applicable per definition of done
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
Related to #222313 (closed)
Edited by Mayra Cabrera