Geo 저장소 동기화
Geo 저장소 동기화에 대해 설명합니다.
저장소 복제(동기화 또는 sync라고도 함)는 기본 사이트에서 보조 사이트로 Git 저장소를 복제하는 핵심 Geo 기능입니다. 이를 통해 보조 사이트가 모든 저장소의 최신 복사본을 유지하여 재해 복구와 Git 데이터의 지리적 분산이 가능합니다. Geo::ProjectRepositoryRegistry 클래스는 보조 사이트에서 저장소 복제 상태를 추적하는 데 사용되는 모델을 정의합니다. 주요(기본) 데이터베이스의 각 프로젝트에 대해 추적 데이터베이스에 하나의 레코드가 유지됩니다. 저장소에 대해 다음을 기록합니다: 마지막으로 동기화된 시간. 마지막으로 성공적으로 동기화된 시간. 재동기화가 필요한지 여부. 재시도 시도 시간. 재시도 횟수. 검증 여부 및 시간. 동기화 트리거 # 저장소 동기화는 다양한 메커니즘을 통해 트리거될 수 있습니다. Mermaid 다이어그램 (13줄) 소스 코드 보기 flowchart TD A(["Start"]) A --> B{"What triggers the repository sync?"} B --> C["Resync from the admin interface"] B --> D["An update event on the repository (for example, git push)"] B --> E["Cron worker periodic sync"] B --> F["Rails console sync: \n 'replicator.sync'"] C --> G["Geo::EventWorker"] D --> G E --> H["Geo::SyncWorker"] F --> I["Geo::FrameworkRepositorySyncService.execute"] H --> I G --> I 이 트리거들은 두 가지 범주로 요약됩니다: 백그라운드 동기화와 이벤트 기반 동기화. 백그라운드 동기화 # 모든 저장소가 동기화되도록 보장하기 위해, Geo::RepositoryRegistrySyncWorker 가 보조 사이트에서 주기적으로 백그라운드에서 실행됩니다. 구체적으로 이 워커는: 동기화가 필요한 레지스트리에 대해 추적 데이터베이스를 쿼리합니다. 다음과 같을 수 있습니다: 동기화되지 않음: 보조 사이트에서 한 번도 동기화되지 않아 아직 존재하지 않는 프로젝트. 최근 업데이트됨: Geo::ProjectRepositoryRegistry 모델의 last_repository_successful_sync_at 타임스탬프보다 최근의 last_repository_updated_at 타임스탬프를 가진 프로젝트. 수동으로 재동기화됨: 관리자가 Geo 관리자 영역 에서 저장소를 재동기화하도록 수동으로 플래그를 지정할 수 있습니다. 업데이트가 필요한 각 저장소에 대해 Geo::SyncWorker 잡을 큐에 넣습니다. 모든 저장소에 대한 기준 동기화를 제공합니다. 이벤트 기반 동기화 # 이벤트 기반 동기화는 기본 사이트의 저장소 업데이트에 의해 트리거됩니다. 저장소가 업데이트되면 이 특정 저장소 업데
