| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| |
| |
| |
| | |
Eliminate N+1 queries in loading discussions.json endpoint
Closes #37955
See merge request gitlab-org/gitlab-ce!14327
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In #37955,we see that the profile had a number of N+1 queries from repeated
access to `cross_reference_not_visible_for?`. This was optimized in previous
versions of GitLab by rendering all notes at once, counting the number of
visible references, and then using that number to check whether a system note
should be fully redacted.
There was also another N+1 query calling `ProjectTeam#member?`, which did not
take advantage of an optimization in prepare_notes_for_rendering that would
preload the maximum access level per project.
Closes #37955
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | | |
Clean up read_registry scope changes
Closes #37789
See merge request gitlab-org/gitlab-ce!14307
|
| | |
| | |
| | |
| | | |
Closes #37789
|
|\ \ \
| |_|/
|/| |
| | |
| | |
| | |
| | | |
Prepare Repository#merge for migration to Gitaly
Closes gitaly#559
See merge request gitlab-org/gitlab-ce!14154
|
| | | |
|
|\ \ \
| | | |
| | | |
| | | | |
# Conflicts:
# db/schema.rb
|
| |\ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Fix setting share_with_group_lock
Closes #37916
See merge request gitlab-org/gitlab-ce!14300
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Prior to this commit running
Namespace#force_share_with_group_lock_on_descendants would result in
updating _all_ namespaces in the namespaces table, not just the
descendants. This is the result of ActiveRecord::Relation#update_all not
taking into account the CTE. To work around this we use the CTE query as
a sub-query instead of directly calling #update_all.
To prevent this from happening the relations returned by
Gitlab::GroupHierarchy are now marked as read-only, resulting in an
error being raised when methods such as #update_all are used.
Fortunately on GitLab.com our statement timeouts appear to have
prevented this query from actually doing any damage other than causing
a very large amount of dead tuples.
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/37916
|
| | | | |
|
| |\ \ \
| | |/ /
| |/| |
| | | |
| | | | |
SQL performance improvements for ProjectsController#show
See merge request gitlab-org/gitlab-ce!14226
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This ensures that if a pipeline is present for the last commit on a
project's homepage we only run 1 query to get the builds, instead of
running 2 queries.
See https://gitlab.com/gitlab-org/gitlab-ce/issues/36878#note_40073339
for more information.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This adds Project#latest_successful_pipeline_for and
Project#latest_successful_pipeline_for_default_branch. The 2nd method
memoizes the result (taking nil values into account) to ensure the
underlying query isn't executed multiple times when viewing a project's
homepage.
See https://gitlab.com/gitlab-org/gitlab-ce/issues/36878#note_40073607
for more information.
|
| |\ \ \
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | | |
Constrain environment deployments to project IDs
Closes #36877
See merge request gitlab-org/gitlab-ce!14252
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When querying the deployments of an environment the query Rails produces
will be along the lines of the following:
SELECT *
FROM deployments
WHERE environment_id = X
For queries such as this (or queries that use this as their base and add
more conditions) there is no meaningful index that can be used as long
as deployments.project_id is not part of a WHERE clause.
To work around this we change that "has_many :deployments" relation to
always add a "WHERE project_id = X" condition. This means that queries
filtering deployments can make better use of the existing indexes. For
example, when filtering by deployments.iid this will result in the
following query:
SELECT *
FROM deployments
WHERE environment_id = X
AND project_id = Y
AND iid = Z
This means PostgreSQL can use the existing index on
(project_id, environment_id, iid) instead of having to use a different
index (or none at all) and having to scan over a large amount of data.
Query plan wise this means that instead of this query and plan:
EXPLAIN (BUFFERS, ANALYZE)
SELECT deployments.*
FROM deployments
WHERE deployments.environment_id = 5
AND deployments.iid = 225;
Index Scan using index_deployments_on_project_id_and_iid on deployments (cost=0.42..14465.75 rows=1 width=117) (actual time=6.394..38.048 rows=1 loops=1)
Index Cond: (iid = 225)
Filter: (environment_id = 5)
Rows Removed by Filter: 839
Buffers: shared hit=4534
Planning time: 0.076 ms
Execution time: 38.073 ms
We produce the following query and plan:
EXPLAIN (BUFFERS, ANALYZE)
SELECT deployments.*
FROM deployments
WHERE deployments.environment_id = 5
AND deployments.iid = 225
AND deployments.project_id = 1292351;
Index Scan using index_deployments_on_project_id_and_iid on deployments (cost=0.42..4.45 rows=1 width=117) (actual time=0.018..0.018 rows=1 loops=1)
Index Cond: ((project_id = 1292351) AND (iid = 225))
Filter: (environment_id = 5)
Buffers: shared hit=4
Planning time: 0.088 ms
Execution time: 0.039 ms
On GitLab.com these changes result in a (roughly) 11x improvement in SQL
timings for the CI environment status endpoint.
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/36877
|
| |\ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
Rename Gitlab::Git::Committer to User
See merge request gitlab-org/gitlab-ce!14254
|
| | | | | |
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Treat newlines as separators for pipeline emails service
Closes #37759
See merge request gitlab-org/gitlab-ce!14250
|
| | | |/ /
| | |/| |
| | | | |
| | | | |
| | | | | |
Before this fix, I don't know if those emails would work
having newlines in them.
|
| | |_|/
| |/| |
| | | |
| | | | |
This method was moved to ::Git but it is not cached there which causes performance problems
|
| |\ \ \
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | | |
fix #34510 add association preloading for issue boards
Closes #34510
See merge request gitlab-org/gitlab-ce!14198
|
| | | |
| | | |
| | | |
| | | | |
added a QueryRecorder for IssuesController#index.json
|
| |\ \ \
| | |_|/
| |/| |
| | | |
| | | | |
Delete duplicated lines.
See merge request !14180
|
| | | | |
|
| |\ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Add usage ping for Auto DevOps
Closes #37648
See merge request !14162
|
| | | | | |
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Resolve "Move `lib/ci` to `lib/gitlab/ci`"
Closes #5836
See merge request !14078
|
| | | | | | |
|
| | | | | | |
|
| | | |_|/
| | |/| | |
|
| |\ \ \ \
| | |/ / /
| |/| | |
| | | | |
| | | | | |
Revert "Merge branch 'revert-f2421b2b' into 'master'"
See merge request !14190
|
| | | | |
| | | | |
| | | | | |
This reverts merge request !14148
|
| | | | | |
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Allow to use same periods for housekeeping tasks
Closes #34981
See merge request !13711
|
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This enables skipping a lesser housekeeping task
(incremental or full repack) by consistently
scheduling a higher task (respectively full repack or gc)
with the same period.
Cf. #34981
|
| |\ \ \ \ \
| | |_|/ / /
| |/| | | |
| | | | | |
| | | | | | |
Hide read_registry scope when registry is disabled on instance
See merge request !13314
|
| | | | | | |
|
|/ / / / /
| | | | |
| | | | |
| | | | | |
visibility level
|
|\ \ \ \ \
| |_|/ / /
|/| | | |
| | | | |
| | | | | |
Read import sources from setting at first initialization
See merge request !14141
|
| | |_|/
| |/| | |
|
|\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Rework how recent push events are retrieved
Closes #35990
See merge request !13995
|
| | |_|/
| |/| |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Whenever you push to a branch GitLab will show a button to create a
merge request (should one not exist already). The underlying code to
display this data was quite inefficient. For example, it involved
multiple slow queries just to figure out what the most recent push event
was.
This commit changes the way this data is retrieved so it's much faster.
This is achieved by caching the ID of the last push event on every push,
which is then retrieved when loading certain pages. Database queries are
only executed if necessary and the cached data is removed automatically
once a merge request has been created, or 2 hours after being stored.
A trade-off of this approach is that we _only_ track the last event.
Previously if you were to push to branch A and B then create a merge
request for branch B we'd still show the widget for branch A. As of this
commit this is no longer the case, instead we will only show the widget
for the branch you pushed to most recently. Once a merge request exists
the widget is no longer displayed. Alternative solutions are either too
complex and/or too slow, hence the decision was made to settle for this
trade-off.
Performance Impact
------------------
In the best case scenario (= a user didn't push anything for more than 2
hours) we perform a single Redis GET per page. Should there be cached
data we will run a single (and lightweight) SQL query to get the
event data from the database. If a merge request already exists we will
run an additional DEL to remove the cache key.
The difference in response timings can vary a bit per project. On
GitLab.com the 99th percentile of time spent in User#recent_push hovers
between 100 milliseconds and 1 second, while the mean hovers around 50
milliseconds. With the changes in this MR the expected time spent in
User#recent_push is expected to be reduced down to just a few
milliseconds.
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/35990
|
|\ \ \ \
| |_|/ /
|/| | |
| | | |
| | | | |
Remove ignore rule for GpgSignature#valid_signature
See merge request !14050
|
| | | |
| | | |
| | | |
| | | | |
This reverts commit cce9afa38a8aa3f3e5a43ab952e1c022c9dd9385.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
'35012-navigation-add-option-to-change-navigation-color-palette' into 'master'"
This reverts merge request !13619
|
| |/ /
|/| |
| | |
| | |
| | | |
Do not use `location.pathname` when accessing environments folders
See merge request !2147
|
|\ \ \
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Improve "Share with group lock" feature for subgroups
Closes #30550
See merge request !13944
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
…when needed
|
|\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Resolve "Banner to enable Auto DevOps at project level"
Closes #37158
See merge request !13991
|