B · 사용 중
구조refresh
획득 요청(A)이 왔지만 그 키의 대기열이 서버 상한 (max_waiters, 기본 16,384)에 도달해 줄을 세우지 못했다는 응답입니다. 락을 못 얻은 것이지 요청이 잘못된 것은 아닙니다.
owner는 요청에 실었던 값을 그대로 되돌려 준 상관자입니다 — 어느 획득 시도가 거절됐는지 정확히 알 수 있습니다(응답 매칭 규칙).
클라이언트 처리
즉시 실패시키면 안 됩니다. wait 예산이 남아 있는 한 백오프를 두고 재시도하세요(공식 클라이언트: 10ms에서 시작해 200ms까지 배가). 대기열이 비면 그다음 시도가 정상적으로 줄을 섭니다. wait가 다할 때까지 계속 포화면 그때 "사용 중" 오류로 호출자에게 알립니다.
재시도는 같은 owner 로 보내야 합니다 — 그래야 그 사이에 획득이 성립했더라도 서버가 같은 획득으로 인식합니다.
바이트 표기:
op는 ASCII 문자,owner는 바이너리(u64, 빅엔디안),key는 UTF-8 텍스트(가변, 구조에서N)입니다. 마지막\n은0A. 고정 헤더는 이진 값이라0x0A를 포함할 수 있으니, 개행을 찾기 전에 바이트 수로 먼저 소비해야 합니다.
흐름
클라이언트
서버
A · 획득 (key · owner)
이 키의 대기열이 max_waiters에 도달
B · 사용 중 (owner 에코)
백오프 후 같은 owner로 재시도
A · 획득 (재시도)
자리가 나면 A · 획득됨 (token)
요청응답
상한은 흐름 제어가 아니라 메모리 방어선입니다 — 인증된 클라이언트가 한 키에 무한정 대기를 쌓아 서버 메모리를 고갈시키는 것을 막습니다. 정상적인 팬아웃보다 넉넉하게 잡혀 있어 평상시에는 이 응답을 볼 일이 없습니다. 상한은 클러스터 설정의 max_waiters로 조절합니다.