Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
3dd760b5
Commit
3dd760b5
authored
Jul 24, 2019
by
GitLab Bot
Browse files
Options
Browse Files
Download
Plain Diff
Automatic merge of gitlab-org/gitlab-ce master
parents
8075f5c1
e7f795a3
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
12 additions
and
78 deletions
+12
-78
changelogs/unreleased/ab-count-strategies.yml
changelogs/unreleased/ab-count-strategies.yml
+5
-0
lib/gitlab/database/count.rb
lib/gitlab/database/count.rb
+5
-7
lib/gitlab/database/count/exact_count_strategy.rb
lib/gitlab/database/count/exact_count_strategy.rb
+0
-4
lib/gitlab/database/count/reltuples_count_strategy.rb
lib/gitlab/database/count/reltuples_count_strategy.rb
+0
-4
lib/gitlab/database/count/tablesample_count_strategy.rb
lib/gitlab/database/count/tablesample_count_strategy.rb
+0
-4
spec/lib/gitlab/database/count/exact_count_strategy_spec.rb
spec/lib/gitlab/database/count/exact_count_strategy_spec.rb
+0
-14
spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb
...ib/gitlab/database/count/reltuples_count_strategy_spec.rb
+0
-14
spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb
.../gitlab/database/count/tablesample_count_strategy_spec.rb
+0
-18
spec/lib/gitlab/database/count_spec.rb
spec/lib/gitlab/database/count_spec.rb
+2
-13
No files found.
changelogs/unreleased/ab-count-strategies.yml
0 → 100644
View file @
3dd760b5
---
title
:
Use tablesample approximate counting by default.
merge_request
:
31048
author
:
type
:
performance
lib/gitlab/database/count.rb
View file @
3dd760b5
...
...
@@ -37,16 +37,14 @@ module Gitlab
# @return [Hash] of Model -> count mapping
def
self
.
approximate_counts
(
models
,
strategies:
[
TablesampleCountStrategy
,
ReltuplesCountStrategy
,
ExactCountStrategy
])
strategies
.
each_with_object
({})
do
|
strategy
,
counts_by_model
|
if
strategy
.
enabled?
models_with_missing_counts
=
models
-
counts_by_model
.
keys
models_with_missing_counts
=
models
-
counts_by_model
.
keys
break
counts_by_model
if
models_with_missing_counts
.
empty?
break
counts_by_model
if
models_with_missing_counts
.
empty?
counts
=
strategy
.
new
(
models_with_missing_counts
).
count
counts
=
strategy
.
new
(
models_with_missing_counts
).
count
counts
.
each
do
|
model
,
count
|
counts_by_model
[
model
]
=
count
end
counts
.
each
do
|
model
,
count
|
counts_by_model
[
model
]
=
count
end
end
end
...
...
lib/gitlab/database/count/exact_count_strategy.rb
View file @
3dd760b5
...
...
@@ -23,10 +23,6 @@ module Gitlab
rescue
*
CONNECTION_ERRORS
{}
end
def
self
.
enabled?
true
end
end
end
end
...
...
lib/gitlab/database/count/reltuples_count_strategy.rb
View file @
3dd760b5
...
...
@@ -31,10 +31,6 @@ module Gitlab
{}
end
def
self
.
enabled?
Gitlab
::
Database
.
postgresql?
end
private
# Models using single-type inheritance (STI) don't work with
...
...
lib/gitlab/database/count/tablesample_count_strategy.rb
View file @
3dd760b5
...
...
@@ -28,10 +28,6 @@ module Gitlab
{}
end
def
self
.
enabled?
Gitlab
::
Database
.
postgresql?
&&
Feature
.
enabled?
(
:tablesample_counts
)
end
private
def
perform_count
(
model
,
estimate
)
...
...
spec/lib/gitlab/database/count/exact_count_strategy_spec.rb
View file @
3dd760b5
...
...
@@ -23,18 +23,4 @@ describe Gitlab::Database::Count::ExactCountStrategy do
expect
(
subject
).
to
eq
({})
end
end
describe
'.enabled?'
do
it
'is enabled for PostgreSQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
true
)
expect
(
described_class
.
enabled?
).
to
be_truthy
end
it
'is enabled for MySQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
false
)
expect
(
described_class
.
enabled?
).
to
be_truthy
end
end
end
spec/lib/gitlab/database/count/reltuples_count_strategy_spec.rb
View file @
3dd760b5
...
...
@@ -48,18 +48,4 @@ describe Gitlab::Database::Count::ReltuplesCountStrategy do
end
end
end
describe
'.enabled?'
do
it
'is enabled for PostgreSQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
true
)
expect
(
described_class
.
enabled?
).
to
be_truthy
end
it
'is disabled for MySQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
false
)
expect
(
described_class
.
enabled?
).
to
be_falsey
end
end
end
spec/lib/gitlab/database/count/tablesample_count_strategy_spec.rb
View file @
3dd760b5
...
...
@@ -56,22 +56,4 @@ describe Gitlab::Database::Count::TablesampleCountStrategy do
end
end
end
describe
'.enabled?'
do
before
do
stub_feature_flags
(
tablesample_counts:
true
)
end
it
'is enabled for PostgreSQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
true
)
expect
(
described_class
.
enabled?
).
to
be_truthy
end
it
'is disabled for MySQL'
do
allow
(
Gitlab
::
Database
).
to
receive
(
:postgresql?
).
and_return
(
false
)
expect
(
described_class
.
enabled?
).
to
be_falsey
end
end
end
spec/lib/gitlab/database/count_spec.rb
View file @
3dd760b5
...
...
@@ -9,24 +9,13 @@ describe Gitlab::Database::Count do
let
(
:models
)
{
[
Project
,
Identity
]
}
context
'.approximate_counts'
do
context
'selecting strategies'
do
let
(
:strategies
)
{
[
double
(
's1'
,
enabled?:
true
),
double
(
's2'
,
enabled?:
false
)]
}
it
'uses only enabled strategies'
do
expect
(
strategies
[
0
]).
to
receive
(
:new
).
and_return
(
double
(
'strategy1'
,
count:
{}))
expect
(
strategies
[
1
]).
not_to
receive
(
:new
)
described_class
.
approximate_counts
(
models
,
strategies:
strategies
)
end
end
context
'fallbacks'
do
subject
{
described_class
.
approximate_counts
(
models
,
strategies:
strategies
)
}
let
(
:strategies
)
do
[
double
(
's1'
,
enabled?:
true
,
new:
first_strategy
),
double
(
's2'
,
enabled?:
true
,
new:
second_strategy
)
double
(
's1'
,
new:
first_strategy
),
double
(
's2'
,
new:
second_strategy
)
]
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment