ACK 전에 꺼진 간식 자판기 · 빈 로그는 최신 상태라는 뜻이 아니다 · 퀴즈
퀴즈: 빈 로그는 최신 상태라는 뜻이 아니다
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
원본 floor=4, last=8이고 전광판 last=3이다. 올바른 복구 판단은?
- 3번부터 보내 마지막 효과를 다시 확인한다
- 전체 로그가 아니므로 무조건 초기화한다
- 4번부터 재생해 연속한 효과를 적용한다
- 커서를 8로 먼저 옮겨 새 이벤트를 기다린다
원본 events는 빈 배열이지만 checkpoint는 last=8, floor=9다. last=-1인 새 전광판에는?
- 잘린 범위이므로 스냅샷 복구를 요청시킨다
- 빈 배열을 성공으로 보내 재고 0을 유지한다
- 원본의 last를 -1로 바꾸어 처음부터 시작한다
- 마지막 번호 8만 보내 최신 상태로 표시한다
trim(5)로 재생 내역을 줄일 때 함께 바꾸어야 할 것은?
- stock.total에서 삭제한 이벤트의 합을 뺀다
- checkpoint.last를 보관하는 첫 번호로 바꾼다
- 새 이벤트가 0부터 시작하도록 번호를 초기화한다
- floor를 6으로 올리고 재고와 last는 유지한다
마지막 적용 번호 5를 보낸 클라이언트의 재생 쿼리가 WHERE seq >= 5라면?
- 5번을 포함하면 스냅샷 없이도 누락을 복원한다
- 이미 처리한 5번을 다시 포함하는 경계 오류다
- 배치 개수가 같으면 같은 의미의 조건이다
- ORDER BY가 있으면 중복 번호는 자동 제거된다
20개 이벤트가 남았고 replay의 최대 배치가 16개다. 첫 호출의 의미는?
- 총 20개 중 16개가 유실되었다는 뜻이다
- 서버가 최신이므로 클라이언트도 최신이다
- 16개까지 처리하고 후속 호출로 더 따라간다
- 4개는 오래된 이벤트이므로 삭제해도 된다
서버 last=8인데 클라이언트가 같은 세대의 last=12를 보냈다. 적절한 응답은?
- 미래 커서 오류로 구분하고 저장소 연결을 조사한다
- 서버가 12를 따라잡을 때까지 무기한 대기한다
- 서버 last를 12로 덮어써 두 번호를 맞춘다
- 빈 배치를 보내 최신 상태라는 성공을 알린다