Guidedog 설명서 0.2.0
언어
이 페이지의 내용
Guidedog / 문서 0.2.0

완전한 출력 세대 게시

독자는 절반만 갱신된 사이트를 보면 안 된다. 이는 게시 속성이며 파싱과 렌더링과는 별개다.

불변식

게시된 출력 트리를 \(P\)라 하자. 준비 중 \(P\)는 변하지 않는다. 다음 트리 \(Q\)는 커밋 결정 전에 완성된다. 커밋 저널은 출력과 관련 기록을 지정한다.

준비는 실패할 수 있다. 호스트는 미완성 세대를 버린다. 확정된 커밋은 중단될 수 있다. 다음 빌드가 저널에 따라 완료하거나 복원한다. 임시 폴더 이름으로 추측하지 않는다.

준비와 동기화, 저널 저장, 출력 교체, 기록 교체, 저널 삭제 순서다.
그림 6 영속 저널은 준비 단계와 확정된 커밋을 구분한다.

캐시가 출력 밖에 있는 이유

폴더 교환은 게시 폴더 안의 모든 것을 옮긴다. 내부 저널도 자신이 설명하는 작업 중 이동하여 복구 시 위치가 불안정해진다. Guidedog은 게시 트리 밖의 안정적인 폴더에 기록을 둔다. 사용자 지정 출력에 형제 캐시를 쓰는 이유다.

지속성과 가시성

파일 내용 동기화와 디렉터리 이름 동기화는 다르다. 알고리즘은 저널을 지우기 전에 둘 다 처리한다. 플랫폼마다 폴더 교환 방식이 다르며 복구 프로토콜은 이를 고려한다. 구현은 lib/project/commit.odin과 lib/project/publish.odin에 있다.

이는 프로젝트 게시를 보호한다. 외부 호스팅 서비스와의 분산 트랜잭션은 아니다. 성공한 빌드를 서버로 복사하는 작업은 배포 도구가 맡는다.