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
-
Changelog entry -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
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
-
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
Related to #13064 (closed)
Edited by Mayra Cabrera