- 22 Feb, 2018 37 commits
-
-
Yorick Peterse authored
-
Yorick Peterse authored
This optimises searching for users when using queries consisting out of one or two characters such as "ab". We optimise such cases by searching for `LOWER(name)` and `LOWER(username)` instead of using `ILIKE`. Using `LOWER` produces a _much_ better performing query. For example, when searching for all users matching the term "a" we'd produce the following plan: Limit (cost=637.69..637.74 rows=20 width=805) (actual time=41.983..41.995 rows=20 loops=1) Buffers: shared hit=8330 -> Sort (cost=637.69..638.61 rows=368 width=805) (actual time=41.982..41.990 rows=20 loops=1) Sort Key: (CASE WHEN ((name)::text = 'a'::text) THEN 0 WHEN ((username)::text = 'a'::text) THEN 1 WHEN ((email)::text = 'a'::text) THEN 2 ELSE 3 END), name Sort Method: top-N heapsort Memory: 35kB Buffers: shared hit=8330 -> Bitmap Heap Scan on users (cost=75.47..627.89 rows=368 width=805) (actual time=9.452..41.305 rows=277 loops=1) Recheck Cond: (((name)::text ~~* 'a'::text) OR ((username)::text ~~* 'a'::text) OR ((email)::text = 'a'::text)) Rows Removed by Index Recheck: 7601 Heap Blocks: exact=7636 Buffers: shared hit=8327 -> BitmapOr (cost=75.47..75.47 rows=368 width=0) (actual time=8.290..8.290 rows=0 loops=1) Buffers: shared hit=691 -> Bitmap Index Scan on index_users_on_name_trigram (cost=0.00..38.85 rows=180 width=0) (actual time=4.369..4.369 rows=4071 loops=1) Index Cond: ((name)::text ~~* 'a'::text) Buffers: shared hit=360 -> Bitmap Index Scan on index_users_on_username_trigram (cost=0.00..34.41 rows=188 width=0) (actual time=3.896..3.896 rows=4140 loops=1) Index Cond: ((username)::text ~~* 'a'::text) Buffers: shared hit=328 -> Bitmap Index Scan on users_email_key (cost=0.00..1.94 rows=1 width=0) (actual time=0.022..0.022 rows=0 loops=1) Index Cond: ((email)::text = 'a'::text) Buffers: shared hit=3 Planning time: 3.912 ms Execution time: 42.171 ms With the changes in this commit we now produce the following plan instead: Limit (cost=13257.48..13257.53 rows=20 width=805) (actual time=1.567..1.579 rows=20 loops=1) Buffers: shared hit=287 -> Sort (cost=13257.48..13280.93 rows=9379 width=805) (actual time=1.567..1.572 rows=20 loops=1) Sort Key: (CASE WHEN ((name)::text = 'a'::text) THEN 0 WHEN ((username)::text = 'a'::text) THEN 1 WHEN ((email)::text = 'a'::text) THEN 2 ELSE 3 END), name Sort Method: top-N heapsort Memory: 35kB Buffers: shared hit=287 -> Bitmap Heap Scan on users (cost=135.66..13007.91 rows=9379 width=805) (actual time=0.194..1.107 rows=277 loops=1) Recheck Cond: ((lower((name)::text) = 'a'::text) OR (lower((username)::text) = 'a'::text) OR ((email)::text = 'a'::text)) Heap Blocks: exact=277 Buffers: shared hit=287 -> BitmapOr (cost=135.66..135.66 rows=9379 width=0) (actual time=0.152..0.152 rows=0 loops=1) Buffers: shared hit=10 -> Bitmap Index Scan on yorick_test_users (cost=0.00..124.75 rows=9377 width=0) (actual time=0.101..0.101 rows=277 loops=1) Index Cond: (lower((name)::text) = 'a'::text) Buffers: shared hit=4 -> Bitmap Index Scan on index_on_users_lower_username (cost=0.00..1.94 rows=1 width=0) (actual time=0.035..0.035 rows=1 loops=1) Index Cond: (lower((username)::text) = 'a'::text) Buffers: shared hit=3 -> Bitmap Index Scan on users_email_key (cost=0.00..1.94 rows=1 width=0) (actual time=0.014..0.014 rows=0 loops=1) Index Cond: ((email)::text = 'a'::text) Buffers: shared hit=3 Planning time: 0.303 ms Execution time: 1.687 ms Here we can see the new query is 25 times faster compared to the old query.
-
Yorick Peterse authored
The frontend code doesn't use this so there's no practical point in supporting this. We also hardcode the limit to 20 so users can no longer request their own limit, which could overload the database (depending on any upper bounds perhaps enforced by Kaminari).
-
Yorick Peterse authored
We can instead just use a UNION. This removes the need for plucking hundreds if not thousands of IDs into memory when a project has many members.
-
Jacob Schatz authored
Use dynamic imports in dispatcher (Part 3) See merge request gitlab-org/gitlab-ce!17277
-
Clement Ho authored
-
Marcia Ramos authored
Add link to project visibility settings in push to create project docs See merge request gitlab-org/gitlab-ce!17292
-
Marcia Ramos authored
Docs milestones refactor See merge request gitlab-org/gitlab-ce!17247
-
🚄 Job van der Voort 🚀 authored
Docs: search/replace "Enterprise Edition" and adjust when applicable See merge request gitlab-org/gitlab-ce!17161
-
Marcia Ramos authored
-
Sean McGivern authored
Fix 500 error when loading an invalid upload URL Closes gitlab-ee#4998 See merge request gitlab-org/gitlab-ce!17267
-
Sean McGivern authored
Revert "Merge branch 'tc-info-version-check' into 'master'" See merge request gitlab-org/gitlab-ce!17269
-
Resolve "document where user clone/fetch activity appears in the logs" Closes #43416 See merge request gitlab-org/gitlab-ce!17227
-
Filipa Lacerda authored
Harmonize CE and EE JS code See merge request gitlab-org/gitlab-ce!17264
-
Douwe Maan authored
Resolve "ActionView::Template::Error: 366..524 out of range" Closes #42332 See merge request gitlab-org/gitlab-ce!17262
-
Pedro Moreira da Silva authored
-
Sean McGivern authored
-
Sean McGivern authored
Resolve "Spec failure: spec/features/users_spec.rb" Closes #43495 See merge request gitlab-org/gitlab-ce!17289
-
Jacob Schatz authored
Backport of Webpack auto include for EE imports See merge request gitlab-org/gitlab-ce!17282
-
Clement Ho authored
-
Rémy Coutable authored
Signed-off-by: Rémy Coutable <remy@rymai.me>
-
Rémy Coutable authored
Signed-off-by: Rémy Coutable <remy@rymai.me>
-
Sean McGivern authored
Rugged sometimes chops a context line in between bytes, resulting in the context line having an invalid encoding: https://github.com/libgit2/rugged/issues/716 When that happens, we will try to detect the encoding for the diff, and sometimes we'll get it wrong. If that difference in encoding results in a difference in string lengths between the diff and the underlying blobs, we'd fail to highlight any inline diffs, and return a 500 status to the user. As we're using the underlying blobs, the encoding is 'correct' anyway, so if the string range is invalid, we can just discard the inline diff highlighting. We still report to Sentry to ensure that we can investigate further in future.
-
Rémy Coutable authored
Signed-off-by: Rémy Coutable <remy@rymai.me>
-
Grzegorz Bizon authored
Fix squash with renamed files Closes gitlab-ee#4975 See merge request gitlab-org/gitlab-ce!17216
-
Douwe Maan authored
Allow branchnames to be named the same as the commit it points to See merge request gitlab-org/gitlab-ce!17231
-
Rémy Coutable authored
Format markdown.md to comply with what it describes. See merge request gitlab-org/gitlab-ce!17284
-
Mark Fletcher authored
-
Mark Fletcher authored
[ci skip]
-
Douwe Maan authored
Add more detail to the proofreader process See merge request gitlab-org/gitlab-ce!17279
-
Filipa Lacerda authored
Resolve "Followup to New design for cancel/stop pipeline confirmation" Closes #42886 See merge request gitlab-org/gitlab-ce!17106
-
Grzegorz Bizon authored
[CE] Incorporate Gitaly's RepositoryService.IsSquashInProgress RPC See merge request gitlab-org/gitlab-ce!17002
-
Grzegorz Bizon authored
Resolve "Controller Projects::PipelinesController#show executes more than 100 SQL queries" Closes #43134 See merge request gitlab-org/gitlab-ce!17168
-
Ulf Rompe authored
When the text says "here are two spaces to force a line break" there really should be two spaces to force a line break.
-
Victor Wu authored
-
Robert Speicher authored
Fix repo existence check in GitAccessWiki Closes #43385 and gitlab-com/infrastructure#3734 See merge request gitlab-org/gitlab-ce!17268
-
Jacob Vosmaer (GitLab) authored
-
- 21 Feb, 2018 3 commits
-
-
Shah El-Rahman authored
-
Dylan Griffith authored
-
Connor Shea authored
-