본문으로 건너뛰기

[PR] checkpoint entry recovery 강화 (partial recovery)

[!tldr] 업무 관점 takeaway daegyu94(팀) 커밋 — checkpoint 복구를 fail-fast에서 부분 복구로 전환. 엔트리 하나가 디코드 실패해도 백엔드 init 전체가 죽지 않게 함. [[S2-checkpoint-overflow|S2]]와 같은 checkpoint 경로라 우리 작업과 인접. 아키텍처 관점 핵심 = 복구 실패를 조용히 삼키면 안 된다 — 스킵된 엔트리의 슬롯이 영구 누수되고, "일부 캐시 유실"이 상위로 신호되지 않는다.

  • 커밋: 356270ae (2026-05-28) · 작성자: Daegyu Han (daegyu94)
  • 출처: raw/work/reviews/cr-356270ae-*.md

문제

_apply_loaded_state가 per-entry 디코드를 인라인 처리 → 한 엔트리에서 int("not-an-int") / 잘못된 torch.Size 등이 raise하면 예외가 __init__까지 버블 → _cleanup_after_init_failure 발동(= 백엔드 init 실패, 전체 복구 무산).

변경

per-entry 디코드를 _decode_checkpoint_entry 헬퍼로 추출하고 호출부를 try/except로 감쌈 → bad 엔트리는 log.warningcontinue, 나머지는 계속 적용(partial recovery). bad-offset/bad-shape 혼합 회귀 테스트 추가.

아키텍처 관점 지적 (큰 흐름)

  1. 슬롯 영구 누수 — 스킵된 엔트리가 가리키던 슬롯이 _index에서 빠지지만 _free_slots반환되지 않는다 → 그 슬롯은 영영 못 쓴다. 부분 복구를 도입하려면 스킵 시 슬롯 회수가 짝으로 와야 한다.
  2. silent partial recovery — fail-fast → 조용한 부분 복구로 시맨틱이 바뀌었는데 상위로 신호가 없다. 운영자는 "일부 캐시가 유실됐다"를 모른다. → 흐름 차원: 복구된/스킵된 엔트리 수를 metric·로그로 노출하고, 광범위 except Exception 대신 디코드 실패 유형을 구분.

상태

커밋(2026-05-28). Tier1(슬롯 누수·시맨틱 신호) 지적.

관련 페이지

  • [[S2-checkpoint-overflow]] — 같은 checkpoint 경로의 overflow 버그
  • [[raw_block-내부구조]] — _apply_loaded_state·_free_slots 코드 근거
  • [[Samsung-LMCache-팀]] — daegyu94 담당 영역