Skip to content

Update usage ping data to track projects with overridden approval rules

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

Before: https://explain.depesz.com/s/HIRN

After: https://explain.depesz.com/s/GBk2

SELECT MAX("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE

Before: https://explain.depesz.com/s/2B3u

After: https://explain.depesz.com/s/5N4e

SELECT COUNT("projects"."id") FROM "projects" WHERE "projects"."disable_overriding_approvers_per_merge_request" = TRUE AND "projects"."id" BETWEEN 0 AND 99999

Before: https://explain.depesz.com/s/t5U3

After: https://explain.depesz.com/s/vjRN

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'

Before: https://explain.depesz.com/s/YlzV

After: https://explain.depesz.com/s/8yA5

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'

Before: https://explain.depesz.com/s/cGVh

After: https://explain.depesz.com/s/XfKB

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

Before: https://explain.depesz.com/s/g9Tn

After: https://explain.depesz.com/s/XEvi

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)

Before: https://explain.depesz.com/s/4i6C

After: https://explain.depesz.com/s/f24A

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)

Before: https://explain.depesz.com/s/YHKa

After: https://explain.depesz.com/s/jTXF3

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

Before: https://explain.depesz.com/s/Nhr2

After: https://explain.depesz.com/s/s4Sp

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'

Before: https://explain.depesz.com/s/F8hHp

After: https://explain.depesz.com/s/SGScQ

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'

Before: https://explain.depesz.com/s/fHdh

After: https://explain.depesz.com/s/bgJw

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

Before: https://explain.depesz.com/s/UWEww

After: https://explain.depesz.com/s/Zxtl

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

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

Related to #222313 (closed)

Edited by Mayra Cabrera

Merge request reports