프로젝트 리포지터리 이전
이 문서는 프로젝트 리포지터리 이전의 코드 설계를 이해하는 데 도움을 주기 위해 작성되었습니다. 이 기능의 코드를 변경하기 전에 이 문서를 읽어보세요.
이 문서는 코드가 자주 변경될 수 있기 때문에 코드가 어떻게 작동하는지 이해하려면 코드와 명세를 확인하세요. 여기에 나열된 세부 내용은 코드 소유자 기능의 주요 컴포넌트가 어떻게 작동하는지 설명합니다.
이 문서는 참조된 코드베이스의 일부가 업데이트되거나 제거되거나 새로운 부분이 추가될 때 업데이트되어야 합니다.
비즈니스 로직
- 
Projects::RepositoryStorageMove: 이동을 추적하며 상태 머신을 포함합니다.- 
app/models/projects/repository_storage_move.rb에 정의됨. 
 - 
 - 
RepositoryStorageMovable: 상태 머신 논리, 유효성 검사기 및 일부 도우미 메서드를 포함합니다.- 
app/models/concerns/repository_storage_movable.rb에 정의됨. 
 - 
 - 
Project: 프로젝트 모델.- 
app/models/project.rb에 정의됨. 
 - 
 - 
CanMoveRepositoryStorage:Project에 포함된 도우미 메서드를 포함합니다.- 
app/models/concerns/can_move_repository_storage.rb에 정의됨. 
 - 
 - 
API::ProjectRepositoryStorageMoves: 프로젝트 리포지터리 이동을위한 API 클래스.- 
lib/api/project_repository_storage_moves.rb에 정의됨. 
 - 
 - 
Entities::Projects::RepositoryStorageMove:Projects::RepositoryStorageMove모델을 직렬화하는 API 엔터티.- 
lib/api/entities/projects/repository_storage_moves.rb에 정의됨. 
 - 
 - 
Projects::ScheduleBulkRepositoryShardMovesService: 대량 이동을 예약하는 서비스.- 
app/services/projects/schedule_bulk_repository_shard_moves_service.rb에 정의됨. 
 - 
 - 
ScheduleBulkRepositoryShardMovesMethods: 대량 이동을위한 일반 메서드.- 
app/services/concerns/schedule_bulk_repository_shard_moves_methods.rb에 정의됨. 
 - 
 - 
Projects::ScheduleBulkRepositoryShardMovesWorker: 대량 이동을 처리하는 워커.- 
app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb에 정의됨. 
 - 
 - 
Projects::UpdateRepositoryStorageWorker: 리포지터리 이동을 찾은 다음 업데이트 리포지터리 서비스를 호출합니다.- 
app/workers/projects/update_repository_storage_worker.rb에 정의됨. 
 - 
 - 
UpdateRepositoryStorageWorker:Projects::UpdateRepositoryStorageWorker의 일반 논리를 포함하는 모듈.- 
app/workers/concerns/update_repository_storage_worker.rb에 정의됨. 
 - 
 - 
Projects::UpdateRepositoryStorageService: 이동을 수행합니다.- 
app/services/projects/update_repository_storage_service.rb에 정의됨. 
 - 
 - 
UpdateRepositoryStorageMethods:Projects::UpdateRepositoryStorageService에 포함된 일반 메서드를 포함하는 모듈.- 
app/services/concerns/update_repository_storage_methods.rb에 정의됨. 
 - 
 - 
Projects::UpdateService: 전달된 매개변수가 이동을 요청하는 경우 이동을 예약합니다.- 
app/services/projects/update_service.rb에 정의됨. 
 - 
 - 
PoolRepository: Gitaly의ObjectPool을 나타내는 Ruby 객체.- 
app/models/pool_repository.rb에 정의됨. 
 - 
 - 
ObjectPool::CreateWorker:Gitaly를 통해ObjectPool을 생성하는 워커.- 
app/workers/object_pool/create_worker.rb에 정의됨. 
 - 
 - 
ObjectPool::JoinWorker:Gitaly를 통해ObjectPool에 참여하는 워커.- 
app/workers/object_pool/join_worker.rb에 정의됨. 
 - 
 - 
ObjectPool::ScheduleJoinWorker:ObjectPool::JoinWorker를 예약하는 워커.- 
app/workers/object_pool/schedule_join_worker.rb에 정의됨. 
 - 
 - 
ObjectPool::DestroyWorker:Gitaly를 통해ObjectPool을 소멸시키는 워커.- 
app/workers/object_pool/destroy_worker.rb에 정의됨. 
 - 
 - 
ObjectPoolQueue:ObjectPool워커를 구성하기 위한 모듈.- 
app/workers/concerns/object_pool_queue.rb에 정의됨. 
 - 
 - 
Repositories::ReplicateService: 데이터를 다른 리포지터리로 복제 처리합니다.- 
app/services/repositories/replicate_service.rb에 정의됨. 
 - 
 
흐름
이 플로차트는 엔드포인트에서 모델로의 플로우를 설명하는 데 도움이 될 것입니다.
API를 통한 리포지터리 이전 예약
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
A[<code>POST /api/:version/project_repository_storage_moves</code>] --> C
B[<code>POST /api/:version/projects/:id/repository_storage_moves</code>] --> D
C[샤드에서 각 프로젝트의 이동 예약] --> D[상태를 예약으로 설정]
D --> E[<code>after_transition callback</code>]
E --> F{<code>set_repository_read_only!</code>}
F -->|success| H[리포지터리 업데이트 워커 예약]
F -->|error| G[상태를 실패로 설정]
예약 후 리포지터리 이동
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
A[리포지터리 업데이트 워커 예약] --> B{상태가 예약됨?}
B -->|예| C[상태를 시작으로 설정]
B -->|아니요| D[성공 반환]
C --> E{동일한 파일 시스템인가?}
E -.-> G[프로젝트 리포지터리를 쓰기 가능하게 설정]
E -->|예| F["리포지터리를 미러링합니다 (프로젝트, 위키, 디자인 및 풀)"]
G --> H[리포지터리 값 업데이트]
H --> I[상태를 완료로 설정]
I --> J[프로젝트를 새 풀 리포지터리와 연결]
J --> K[이전 풀 리포지터리의 연결 해제]
K --> L[프로젝트 리포지터리 스토리지 값 업데이트]
L --> N[동일한 파일 시스템인 경우 이전 경로 제거]
N --> M[상태를 완료로 설정]
도움말