1. 08 12月, 2018 1 次提交
    • Z
      Allow public forks to be deduplicated · 896c0bdb
      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.
      896c0bdb
  2. 07 12月, 2018 3 次提交
  3. 06 12月, 2018 1 次提交
  4. 05 12月, 2018 5 次提交
  5. 04 12月, 2018 1 次提交
  6. 03 12月, 2018 1 次提交
  7. 30 11月, 2018 1 次提交
  8. 27 11月, 2018 4 次提交
  9. 26 11月, 2018 1 次提交
  10. 22 11月, 2018 1 次提交
  11. 21 11月, 2018 2 次提交
  12. 20 11月, 2018 2 次提交
  13. 16 11月, 2018 1 次提交
  14. 15 11月, 2018 4 次提交
  15. 14 11月, 2018 2 次提交
  16. 13 11月, 2018 3 次提交
  17. 07 11月, 2018 7 次提交
    • S
      Remove low selective indexes · 90df7321
      Shinya Maeda 提交于
      90df7321
    • T
      User can keep their commit email private · c239452b
      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.
      c239452b
    • T
      Enhance performance of counting local Uploads · 1c481b7a
      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
      1c481b7a
    • S
      Add index on created_at with status · 66d43c84
      Shinya Maeda 提交于
      66d43c84
    • S
      Bring back created indexes · 97ac2d72
      Shinya Maeda 提交于
      97ac2d72
    • S
      bb55bcdd
    • S
      Rever add action follow up 1 · 16fc61d6
      Shinya Maeda 提交于
      16fc61d6