OSSCA Chromium

기여 목록 / 8425063

CacheStorage: return match results before later caches finish

ContentfixIn Review

여러 캐시를 검색할 때 생성 순서상 반환할 결과가 정해지면 이후 캐시를 모두 기다리지 않고 응답하는 경로를 추가했습니다. CacheStorageEarlyMatch 기능은 기본 비활성 상태이며, 꺼져 있으면 기존 전체 대기 동작을 유지합니다.

문제 설명

MatchAllCaches()는 앞쪽 캐시에서 이미 일치하는 응답을 찾았어도 모든 캐시 검색이 끝나야 결과를 전달했습니다. 단순히 먼저 끝난 검색을 반환하면 캐시 생성 순서와 오류 우선순위가 바뀌고, 조기 응답을 작업 전체의 완료로 처리하면 진행 중 검색과 배타 작업이 겹칠 수 있습니다.

해결 내용

  1. 기능이 켜져 있으면 캐시 생성 순서대로 완료 결과를 확인해 첫 번째 NotFound가 아닌 결과를 반환합니다. 나중 캐시가 먼저 끝나도 앞선 캐시의 결과를 확인할 때까지 기다립니다.
  2. 결과가 정해지면 아직 백엔드 조회를 시작하지 않은 검색은 시작 시점에 건너뜁니다. 이미 시작된 검색은 정상 완료시킵니다.
  3. 응답 콜백과 스케줄러 작업 완료를 분리합니다. 모든 검색이 끝나거나 건너뛰어질 때까지 barrier와 작업을 유지해 배타 작업이 겹치지 않도록 합니다.
  4. 동기 오류가 발생하거나 응답 콜백이 manager를 삭제하는 경우를 고려해 검색 배포 루프가 끝난 뒤 클라이언트 콜백을 실행합니다. 결과 결정 뒤 불필요한 응답은 해제하고 전체 완료 시점을 trace에 기록합니다.

테스트 방법

  • StorageMatchAllRespondsBeforeLaterCache, StorageMatchAllWaitsForEarlierCache, StorageMatchAllRespondsAfterEarlierMiss는 조기 응답과 생성 순서 우선 규칙을 검증합니다.
  • StorageMatchAllEarlierMatchOverridesLaterError와 StorageMatchAllEarlierMissReturnsLaterError는 순서에 따른 성공·오류 선택을 확인합니다.
  • SkipQueuedMatchBeforeBackendQuery와 DoNotSkipMatchAfterBackendQueryStarts는 검색 생략을 실제 시작 시점에 판단하고 이미 시작된 조회는 완료하는지 확인합니다.
  • 응답 콜백에서 핸들을 해제하거나 manager를 동기·비동기로 파괴하는 경우, 대기 중 배타 작업, 기능 비활성 경로도 검증합니다. manager 테스트는 메모리·디스크 캐시를 대상으로 합니다.

Gerrit 기록상 Patch Set 5는 2026-10-01 UTC에 CQ 실행을 통과했습니다. 보고서 작성 과정에서 Chromium 테스트를 별도로 실행하지는 않았습니다.

관련 이슈와 외부 PR

배운 점

  • 응답을 빨리 전달하는 것과 공유 작업 전체를 완료하는 것은 별개의 수명 관리 문제입니다.
  • 병렬 검색의 결과 선택은 완료 순서가 아니라 API가 약속한 생성 순서를 지켜야 합니다. 오류 역시 같은 순서 규칙의 대상입니다.

참고 자료