2017-11-28 11:16:50 -05:00
|
|
|
---
|
2018-09-06 15:20:42 -04:00
|
|
|
- auto_devops:auto_devops_disable
|
|
|
|
|
2017-11-28 11:16:50 -05:00
|
|
|
- cronjob:admin_email
|
|
|
|
- cronjob:expire_build_artifacts
|
|
|
|
- cronjob:gitlab_usage_ping
|
|
|
|
- cronjob:import_export_project_cleanup
|
2018-02-06 08:25:46 -05:00
|
|
|
- cronjob:pages_domain_verification_cron
|
2017-11-28 11:16:50 -05:00
|
|
|
- cronjob:pipeline_schedule
|
|
|
|
- cronjob:prune_old_events
|
|
|
|
- cronjob:remove_expired_group_links
|
|
|
|
- cronjob:remove_expired_members
|
|
|
|
- cronjob:remove_unreferenced_lfs_objects
|
|
|
|
- cronjob:repository_archive_cache
|
2018-06-26 09:12:29 -04:00
|
|
|
- cronjob:repository_check_dispatch
|
2017-11-28 11:16:50 -05:00
|
|
|
- cronjob:requests_profiles
|
|
|
|
- cronjob:stuck_ci_jobs
|
|
|
|
- cronjob:stuck_import_jobs
|
|
|
|
- cronjob:stuck_merge_jobs
|
2018-06-06 07:18:32 -04:00
|
|
|
- cronjob:ci_archive_traces_cron
|
2017-11-28 11:16:50 -05:00
|
|
|
- cronjob:trending_projects
|
2018-03-30 09:05:20 -04:00
|
|
|
- cronjob:issue_due_scheduler
|
2018-06-26 12:24:42 -04:00
|
|
|
- cronjob:prune_web_hook_logs
|
2017-11-28 11:16:50 -05:00
|
|
|
|
|
|
|
- gcp_cluster:cluster_install_app
|
2019-02-07 16:40:55 -05:00
|
|
|
- gcp_cluster:cluster_upgrade_app
|
2017-11-28 11:16:50 -05:00
|
|
|
- gcp_cluster:cluster_provision
|
|
|
|
- gcp_cluster:cluster_wait_for_app_installation
|
|
|
|
- gcp_cluster:wait_for_cluster_creation
|
2018-02-11 22:22:15 -05:00
|
|
|
- gcp_cluster:cluster_wait_for_ingress_ip_address
|
2018-12-21 08:17:13 -05:00
|
|
|
- gcp_cluster:cluster_configure
|
2018-11-15 04:17:41 -05:00
|
|
|
- gcp_cluster:cluster_project_configure
|
2017-11-28 11:16:50 -05:00
|
|
|
|
|
|
|
- github_import_advance_stage
|
|
|
|
- github_importer:github_import_import_diff_note
|
|
|
|
- github_importer:github_import_import_issue
|
|
|
|
- github_importer:github_import_import_note
|
2018-06-06 12:42:18 -04:00
|
|
|
- github_importer:github_import_import_lfs_object
|
2017-11-28 11:16:50 -05:00
|
|
|
- github_importer:github_import_import_pull_request
|
|
|
|
- github_importer:github_import_refresh_import_jid
|
|
|
|
- github_importer:github_import_stage_finish_import
|
|
|
|
- github_importer:github_import_stage_import_base_data
|
|
|
|
- github_importer:github_import_stage_import_issues_and_diff_notes
|
|
|
|
- github_importer:github_import_stage_import_notes
|
2018-06-06 12:42:18 -04:00
|
|
|
- github_importer:github_import_stage_import_lfs_objects
|
2017-11-28 11:16:50 -05:00
|
|
|
- github_importer:github_import_stage_import_pull_requests
|
|
|
|
- github_importer:github_import_stage_import_repository
|
|
|
|
|
2019-01-16 20:53:50 -05:00
|
|
|
- hashed_storage:hashed_storage_migrator
|
|
|
|
|
2018-03-30 09:05:20 -04:00
|
|
|
- mail_scheduler:mail_scheduler_issue_due
|
2018-04-20 13:37:38 -04:00
|
|
|
- mail_scheduler:mail_scheduler_notification_service
|
2018-03-30 09:05:20 -04:00
|
|
|
|
2018-02-21 11:43:21 -05:00
|
|
|
- object_storage:object_storage_background_move
|
|
|
|
- object_storage:object_storage_migrate_uploads
|
|
|
|
|
2017-11-28 11:16:50 -05:00
|
|
|
- pipeline_cache:expire_job_cache
|
|
|
|
- pipeline_cache:expire_pipeline_cache
|
|
|
|
- pipeline_creation:create_pipeline
|
2017-12-18 12:00:08 -05:00
|
|
|
- pipeline_creation:run_pipeline_schedule
|
2018-03-06 06:20:36 -05:00
|
|
|
- pipeline_background:archive_trace
|
2018-05-04 08:48:10 -04:00
|
|
|
- pipeline_background:ci_build_trace_chunk_flush
|
2017-11-28 11:16:50 -05:00
|
|
|
- pipeline_default:build_coverage
|
|
|
|
- pipeline_default:build_trace_sections
|
|
|
|
- pipeline_default:pipeline_metrics
|
|
|
|
- pipeline_default:pipeline_notification
|
|
|
|
- pipeline_hooks:build_hooks
|
|
|
|
- pipeline_hooks:pipeline_hooks
|
|
|
|
- pipeline_processing:build_finished
|
|
|
|
- pipeline_processing:build_queue
|
|
|
|
- pipeline_processing:build_success
|
|
|
|
- pipeline_processing:pipeline_process
|
|
|
|
- pipeline_processing:pipeline_success
|
|
|
|
- pipeline_processing:pipeline_update
|
|
|
|
- pipeline_processing:stage_update
|
2018-03-06 11:34:17 -05:00
|
|
|
- pipeline_processing:update_head_pipeline_for_merge_request
|
2018-09-25 05:44:08 -04:00
|
|
|
- pipeline_processing:ci_build_schedule
|
2017-11-28 11:16:50 -05:00
|
|
|
|
2018-11-04 19:37:40 -05:00
|
|
|
- deployment:deployments_success
|
|
|
|
|
2017-11-28 11:16:50 -05:00
|
|
|
- repository_check:repository_check_clear
|
2018-06-26 09:12:29 -04:00
|
|
|
- repository_check:repository_check_batch
|
2017-11-28 11:16:50 -05:00
|
|
|
- repository_check:repository_check_single_repository
|
|
|
|
|
2018-07-16 14:30:17 -04:00
|
|
|
- todos_destroyer:todos_destroyer_confidential_issue
|
|
|
|
- todos_destroyer:todos_destroyer_entity_leave
|
2018-11-19 16:29:19 -05:00
|
|
|
- todos_destroyer:todos_destroyer_group_private
|
2018-07-16 14:30:17 -04:00
|
|
|
- todos_destroyer:todos_destroyer_project_private
|
2018-07-27 05:28:17 -04:00
|
|
|
- todos_destroyer:todos_destroyer_private_features
|
2018-07-16 14:30:17 -04:00
|
|
|
|
Allow public forks to be deduplicated
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.
2018-12-03 08:49:58 -05:00
|
|
|
- object_pool:object_pool_create
|
|
|
|
- object_pool:object_pool_schedule_join
|
|
|
|
- object_pool:object_pool_join
|
2018-12-17 03:49:38 -05:00
|
|
|
- object_pool:object_pool_destroy
|
Allow public forks to be deduplicated
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.
2018-12-03 08:49:58 -05:00
|
|
|
|
2019-01-10 09:22:58 -05:00
|
|
|
- container_repository:delete_container_repository
|
|
|
|
- container_repository:cleanup_container_repository
|
|
|
|
|
2017-11-28 11:16:50 -05:00
|
|
|
- default
|
|
|
|
- mailers # ActionMailer::DeliveryJob.queue_name
|
|
|
|
|
|
|
|
- authorized_projects
|
|
|
|
- background_migration
|
|
|
|
- create_gpg_signature
|
|
|
|
- delete_merged_branches
|
|
|
|
- delete_user
|
|
|
|
- email_receiver
|
|
|
|
- emails_on_push
|
|
|
|
- expire_build_instance_artifacts
|
|
|
|
- git_garbage_collect
|
|
|
|
- gitlab_shell
|
|
|
|
- group_destroy
|
|
|
|
- invalid_gpg_signature_update
|
|
|
|
- irker
|
|
|
|
- merge
|
|
|
|
- namespaceless_project_destroy
|
|
|
|
- new_issue
|
|
|
|
- new_merge_request
|
|
|
|
- new_note
|
|
|
|
- pages
|
2018-02-06 08:25:46 -05:00
|
|
|
- pages_domain_verification
|
2018-02-26 11:17:17 -05:00
|
|
|
- plugin
|
2017-11-28 11:16:50 -05:00
|
|
|
- post_receive
|
|
|
|
- process_commit
|
|
|
|
- project_cache
|
|
|
|
- project_destroy
|
|
|
|
- project_export
|
|
|
|
- project_migrate_hashed_storage
|
|
|
|
- project_service
|
|
|
|
- propagate_service_template
|
|
|
|
- reactive_caching
|
2017-12-20 04:01:21 -05:00
|
|
|
- rebase
|
2018-12-05 10:22:52 -05:00
|
|
|
- remote_mirror_notification
|
2017-11-28 11:16:50 -05:00
|
|
|
- repository_fork
|
|
|
|
- repository_import
|
2018-05-03 10:19:21 -04:00
|
|
|
- repository_remove_remote
|
2017-11-28 11:16:50 -05:00
|
|
|
- system_hook_push
|
|
|
|
- update_merge_requests
|
|
|
|
- upload_checksum
|
|
|
|
- web_hook
|
2018-05-03 08:55:14 -04:00
|
|
|
- repository_update_remote_mirror
|
2018-05-16 11:46:18 -04:00
|
|
|
- create_note_diff_file
|
2018-06-11 16:45:16 -04:00
|
|
|
- delete_diff_files
|
Add repository languages for projects
Our friends at GitHub show the programming languages for a long time,
and inspired by that this commit means to create about the same
functionality.
Language detection is done through Linguist, as before, where the
difference is that we cache the result in the database. Also, Gitaly can
incrementaly scan a repository. This is done through a shell out, which
creates overhead of about 3s each run. For now this won't be improved.
Scans are triggered by pushed to the default branch, usually `master`.
However, one exception to this rule the charts page. If we're requesting
this expensive data anyway, we just cache it in the database.
Edge cases where there is no repository, or its empty are caught in the
Repository model. This makes use of Redis caching, which is probably
already loaded.
The added model is called RepositoryLanguage, which will make it harder
if/when GitLab supports multiple repositories per project. However, for
now I think this shouldn't be a concern. Also, Language could be
confused with the i18n languages and felt like the current name was
suiteable too.
Design of the Project#Show page is done with help from @dimitrieh. This
change is not visible to the end user unless detections are done.
2018-06-06 07:10:59 -04:00
|
|
|
- detect_repository_languages
|
2018-11-19 10:03:58 -05:00
|
|
|
- repository_cleanup
|
2018-10-07 14:31:08 -04:00
|
|
|
- delete_stored_files
|
2018-12-05 19:51:30 -05:00
|
|
|
- import_issues_csv
|