- 08 12月, 2018 1 次提交
-
-
由 Zeger-Jan van de Weg 提交于
When a project is forked, the new repository used to be a deep copy of everything stored on disk by leveraging `git clone`. This works well, and makes isolation between repository easy. However, the clone is at the start 100% the same as the origin repository. And in the case of the objects in the object directory, this is almost always going to be a lot of duplication. Object Pools are a way to create a third repository that essentially only exists for its 'objects' subdirectory. This third repository's object directory will be set as alternate location for objects. This means that in the case an object is missing in the local repository, git will look in another location. This other location is the object pool repository. When Git performs garbage collection, it's smart enough to check the alternate location. When objects are duplicated, it will allow git to throw one copy away. This copy is on the local repository, where to pool remains as is. These pools have an origin location, which for now will always be a repository that itself is not a fork. When the root of a fork network is forked by a user, the fork still clones the full repository. Async, the pool repository will be created. Either one of these processes can be done earlier than the other. To handle this race condition, the Join ObjectPool operation is idempotent. Given its idempotent, we can schedule it twice, with the same effect. To accommodate the holding of state two migrations have been added. 1. Added a state column to the pool_repositories column. This column is managed by the state machine, allowing for hooks on transitions. 2. pool_repositories now has a source_project_id. This column in convenient to have for multiple reasons: it has a unique index allowing the database to handle race conditions when creating a new record. Also, it's nice to know who the host is. As that's a short link to the fork networks root. Object pools are only available for public project, which use hashed storage and when forking from the root of the fork network. (That is, the project being forked from itself isn't a fork) In this commit message I use both ObjectPool and Pool repositories, which are alike, but different from each other. ObjectPool refers to whatever is on the disk stored and managed by Gitaly. PoolRepository is the record in the database.
-
- 07 12月, 2018 3 次提交
-
-
由 Kamil Trzciński 提交于
Brings back 1e8f1de0 reverted in !23644 Closes #52342 See merge request gitlab-org/gitlab-ce!23436
-
由 Robert Speicher 提交于
This reverts commit 1e8f1de0, reversing changes made to 62d97112.
-
由 Nick Thomas 提交于
-
- 06 12月, 2018 1 次提交
-
-
由 Shinya Maeda 提交于
-
- 05 12月, 2018 5 次提交
-
-
由 Grzegorz Bizon 提交于
-
由 Grzegorz Bizon 提交于
-
由 Shinya Maeda 提交于
-
由 Yorick Peterse 提交于
This reverts commit d7291c64
-
由 🤖 GitLab Bot 🤖 提交于
This reverts commit c3d0f129
-
- 04 12月, 2018 1 次提交
-
-
由 Grzegorz Bizon 提交于
-
- 03 12月, 2018 1 次提交
-
-
由 Lin Jen-Shin 提交于
-
- 30 11月, 2018 1 次提交
-
-
由 Toon Claes 提交于
-
- 27 11月, 2018 4 次提交
-
-
由 Zeger-Jan van de Weg 提交于
To separate the different kinds of repositories we have at GitLab this table will be renamed to pool_repositories. A project can, for now at least, be member of none, or one of these. The table will get additional columns in a later merge request where more logic is implemented for the model. Further included is a small refactor of logic around hashing ids for the disk_path, mainly to ensure a previous implementation is reusable. The disk_path for the pool_repositories table no longer has a NOT NULL constraint, but given the hashing of the ID requires the DB to assign the record an ID, an after_create hook is used to update the value. A related MR is: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23143, adding tables for 'normal' repositories and wiki_repositories.
-
由 Gabriel Mazetto 提交于
This approach caused many different problems as we tightened the query execution timeout.
-
由 Chris Baumbauer 提交于
-
由 Lin Jen-Shin 提交于
-
- 26 11月, 2018 1 次提交
-
-
由 Lin Jen-Shin 提交于
-
- 22 11月, 2018 1 次提交
-
-
由 Amit Rathi 提交于
-
- 21 11月, 2018 2 次提交
-
-
由 Grzegorz Bizon 提交于
-
由 Grzegorz Bizon 提交于
-
- 20 11月, 2018 2 次提交
-
-
由 Grzegorz Bizon 提交于
-
由 Amit Rathi 提交于
-
- 16 11月, 2018 1 次提交
-
-
由 Grzegorz Bizon 提交于
-
- 15 11月, 2018 4 次提交
-
-
由 Grzegorz Bizon 提交于
-
由 Kamil Trzciński 提交于
-
由 Amit Rathi 提交于
-
由 Kamil Trzciński 提交于
-
- 14 11月, 2018 2 次提交
-
-
由 Jan Provaznik 提交于
* add_index replaced with t.index * intiger(size 8) replaced with bigint
-
由 Kamil Trzciński 提交于
-
- 13 11月, 2018 3 次提交
-
-
由 Amit Rathi 提交于
-
由 Shinya Maeda 提交于
-
由 Shinya Maeda 提交于
-
- 07 11月, 2018 7 次提交
-
-
由 Shinya Maeda 提交于
-
由 Tiago Botelho 提交于
The private commit email is automatically generated in the format: id-username@noreply.HOSTNAME GitLab instance admins are able to change the HOSTNAME portion, that defaults to Gitlab's hostname, to whatever they prefer.
-
由 Toon Claes 提交于
Add an index to the `store` column on `uploads`. This makes counting local uploads faster. Also, there is no longer need to check for objects with `store = NULL`. See https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18557 --- ### Query plans Query: ```sql SELECT COUNT(*) FROM "uploads" WHERE ("uploads"."store" = ? OR "uploads"."store" IS NULL) ``` #### Without index ``` gitlabhq_production=# EXPLAIN ANALYZE SELECT uploads.* FROM uploads WHERE (uploads.store = 1 OR uploads.store IS NULL); QUERY PLAN --------------------------------------------------------------------------------------------------------------- Seq Scan on uploads (cost=0.00..601729.54 rows=578 width=272) (actual time=6.170..2308.256 rows=545 loops=1) Filter: ((store = 1) OR (store IS NULL)) Rows Removed by Filter: 4411957 Planning time: 38.652 ms Execution time: 2308.454 ms (5 rows) ``` #### Add index ``` gitlabhq_production=# create index uploads_tmp1 on uploads (store); CREATE INDEX ``` #### With index ``` gitlabhq_production=# EXPLAIN ANALYZE SELECT uploads.* FROM uploads WHERE (uploads.store = 1 OR uploads.store IS NULL); QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on uploads (cost=11.46..1238.88 rows=574 width=272) (actual time=0.155..0.577 rows=545 loops=1) Recheck Cond: ((store = 1) OR (store IS NULL)) Heap Blocks: exact=217 -> BitmapOr (cost=11.46..11.46 rows=574 width=0) (actual time=0.116..0.116 rows=0 loops=1) -> Bitmap Index Scan on uploads_tmp1 (cost=0.00..8.74 rows=574 width=0) (actual time=0.095..0.095 rows=545 loops=1) Index Cond: (store = 1) -> Bitmap Index Scan on uploads_tmp1 (cost=0.00..2.44 rows=1 width=0) (actual time=0.020..0.020 rows=0 loops=1) Index Cond: (store IS NULL) Planning time: 0.274 ms Execution time: 0.637 ms (10 rows) ``` Closes https://gitlab.com/gitlab-org/gitlab-ee/issues/6070
-
由 Shinya Maeda 提交于
-
由 Shinya Maeda 提交于
-
由 Stan Hu 提交于
-
由 Shinya Maeda 提交于
-