프로젝트 저장소 이동
이 문서는 프로젝트 저장소 이동의 코드 설계를 이해하기 위해 기여자들이 도와주도록 작성되었습니다. 이 기능의 코드를 변경하기 전에 이 문서를 읽어보세요.
이 문서는 코드가 자주 변경될 수 있으므로 코드 설계에 대한 개요로 의도적으로 제한되어 있습니다. 특정 기능이 작동하는 방법을 이해하려면 코드와 명세서를 확인하세요. 여기에는 코드 새로운 위원들의 주요 구성 요소가 작동하는 방법에 대한 설명이 있습니다.
참고: 이 문서는 참조된 코드베이스의 부분이 업데이트, 제거되거나 새로운 부분이 추가될 때 업데이트되어야 합니다.
비즈니스 로직
-
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
: GitalyObjectPool
을 나타내는 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>상태 전환 후 콜백</code>]
E --> F{<code>set_repository_read_only!</code>}
F -->|성공| H[저장소 업데이트 워커 예약]
F -->|에러| 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[상태를 완료로 설정]