Skip to content

Resolve "Add count of projects with CODEOWNERS file to usage ping"

What does this MR do?

Fixes #13064 (closed)

Does this MR meet the acceptance criteria?

Conformity

New Database Queries:

distinct_count(::ApprovalMergeRequestRule.code_owner_approval_required, :merge_request_id)

Sends the following queries:

SELECT
    MIN("approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:56:in `count'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0]]
Result  (cost=1.81..1.82 rows=1 width=4) (actual time=36.004..36.004 rows=1 loops=1)
  Buffers: shared hit=5 read=51
  I/O Timings: read=33.507
  InitPlan 1 (returns $0)
    ->  Limit  (cost=0.43..1.81 rows=1 width=4) (actual time=36.001..36.002 rows=1 loops=1)
          Buffers: shared hit=5 read=51
          I/O Timings: read=33.507
          ->  Index Scan using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..239352.03 rows=173982 width=4) (actual time=36.000..36.001 rows=1 loops=1)
                Index Cond: (merge_request_id IS NOT NULL)
                Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
                Rows Removed by Filter: 2151
                Buffers: shared hit=5 read=51
                I/O Timings: read=33.507
Planning time: 1.363 ms
Execution time: 36.038 ms
SELECT
    MAX("approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:57:in `count'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0]]
Result  (cost=1.81..1.82 rows=1 width=4) (actual time=0.413..0.413 rows=1 loops=1)
  Buffers: shared hit=17
  InitPlan 1 (returns $0)
    ->  Limit  (cost=0.43..1.81 rows=1 width=4) (actual time=0.411..0.411 rows=1 loops=1)
          Buffers: shared hit=17
          ->  Index Scan Backward using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..239378.39 rows=174002 width=4) (actual time=0.411..0.411 rows=1 loops=1)
                Index Cond: (merge_request_id IS NOT NULL)
                Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
                Rows Removed by Filter: 24
                Buffers: shared hit=17
Planning time: 1.432 ms
Execution time: 0.447 ms
SELECT
    COUNT(DISTINCT "approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
AND "approval_merge_request_rules"."merge_request_id" BETWEEN $4
AND $5
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:85:in `batch_fetch'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0],["merge_request_id", 0],["merge_request_id", 9999]]
Aggregate  (cost=3.46..3.47 rows=1 width=8) (actual time=0.034..0.035 rows=1 loops=1)
  Buffers: shared hit=11
  ->  Index Scan using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..3.46 rows=1 width=4) (actual time=0.004..0.004 rows=0 loops=1)
        Index Cond: ((merge_request_id >= 0) AND (merge_request_id <= 9999))
        Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
        Buffers: shared hit=3
Planning time: 1.482 ms
Execution time: 0.149 ms

distinct_count(::ApprovalMergeRequestRule.code_owner_approval_optional, :merge_request_id)

Sends the following queries:

SELECT
    MIN("approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:56:in `count'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0]]
Result  (cost=1.81..1.82 rows=1 width=4) (actual time=1.469..1.469 rows=1 loops=1)
  Buffers: shared hit=56
  InitPlan 1 (returns $0)
    ->  Limit  (cost=0.43..1.81 rows=1 width=4) (actual time=1.467..1.468 rows=1 loops=1)
          Buffers: shared hit=56
          ->  Index Scan using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..239417.18 rows=174032 width=4) (actual time=1.466..1.467 rows=1 loops=1)
                Index Cond: (merge_request_id IS NOT NULL)
                Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
                Rows Removed by Filter: 2151
                Buffers: shared hit=56
Planning time: 1.471 ms
Execution time: 1.500 ms
SELECT
    MAX("approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:57:in `count'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0]]
Result  (cost=1.81..1.82 rows=1 width=4) (actual time=0.554..0.554 rows=1 loops=1)
  Buffers: shared hit=28
  InitPlan 1 (returns $0)
    ->  Limit  (cost=0.43..1.81 rows=1 width=4) (actual time=0.552..0.552 rows=1 loops=1)
          Buffers: shared hit=28
          ->  Index Scan Backward using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..239421.32 rows=174035 width=4) (actual time=0.550..0.550 rows=1 loops=1)
                Index Cond: (merge_request_id IS NOT NULL)
                Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
                Rows Removed by Filter: 28
                Buffers: shared hit=28
Planning time: 1.477 ms
Execution time: 0.597 ms
SELECT
    COUNT(DISTINCT "approval_merge_request_rules"."merge_request_id")
FROM
    "approval_merge_request_rules"
WHERE ("approval_merge_request_rules"."code_owner" = $1
    OR "approval_merge_request_rules"."rule_type" = $2)
AND "approval_merge_request_rules"."approvals_required" = $3
AND "approval_merge_request_rules"."merge_request_id" BETWEEN $4
AND $5
/*application:test,correlation_id:cd446552999ab50f21686addb4d23ab1,line:/lib/gitlab/database/batch_count.rb:85:in `batch_fetch'*/
[["code_owner", TRUE],["rule_type", 2],["approvals_required", 0],["merge_request_id", 0],["merge_request_id", 9999]]
Aggregate  (cost=3.46..3.47 rows=1 width=8) (actual time=0.032..0.032 rows=1 loops=1)
  Buffers: shared hit=11
  ->  Index Scan using index_approval_merge_request_rules_1 on approval_merge_request_rules  (cost=0.43..3.46 rows=1 width=4) (actual time=0.004..0.004 rows=0 loops=1)
        Index Cond: ((merge_request_id >= 0) AND (merge_request_id <= 9999))
        Filter: ((code_owner OR (rule_type = 2)) AND (approvals_required = 0))
        Buffers: shared hit=3
Planning time: 1.438 ms
Execution time: 0.135 ms

Availability and Testing

Related to #13064 (closed)

Edited by Mayra Cabrera

Merge request reports