menuTicketing
문서search

복제 명령

모든 락 상태 변경은 아래 명령 중 하나로 AppendEntries의 로그 엔트리에 실려 복제되고, 과반 커밋 후 모든 노드가 같은 순서로 적용합니다.

명령 (리더가 제안)

명령필드의미
Grantkey, lease_ms키 획득. 토큰은 명령에 없고, 적용 시점에 각 노드의 상태머신이 결정적으로 부여 — 그래서 모든 노드가 같은 토큰을 계산
Releasekey키 반납
Expirekey, token리더 주도 lease 만료. token이 일치할 때만 제거 — 늦게 도착하거나 중복된 만료가 그 사이 새로 발급된 락을 지우지 못함(멱등)

적용 결과 (상태머신 → 리더)

결과의미
Granted { token }획득 성공 — 발급된 펜싱 토큰
GrantRejected이미 보유 중인 키에 Grant가 도착(방어적 — 정상 흐름에서는 발생하지 않음)
Released반납됨
NotFound반납하려는 키가 없었음
Expired { existed }만료 처리됨 — existed는 실제로 제거됐는지
Noop아무 일 없음

lease의 남은 시간은 각 노드가 로컬 시계로 추적하지만, 실제 제거는 항상 커밋된 Expire 명령으로만 일어납니다 — 노드 간 시계 차이가 락 상태를 갈라놓지 못하는 이유입니다. 클라이언트가 응답을 받기 전에 사라졌다면(연결 끊김), 리더는 발급 직후 스스로 Release를 제안해 유령 락을 곧바로 정리합니다.

용어

  • 상태머신(state machine) — 커밋된 명령을 순서대로 적용해 현재 상태(여기서는 락 테이블)를 만들어 내는 부분. 모든 노드가 같은 명령을 같은 순서로 적용하므로 항상 같은 상태에 도달합니다.
  • 커밋(commit) — 과반 노드가 받아 적어 "확정"된 상태. 커밋된 명령만 상태머신에 적용됩니다.
  • 멱등(idempotent) — 같은 명령이 실수로 두 번 적용돼도 결과가 달라지지 않는 성질.