OSSCA Chromium

기여 목록 / 8495871

Quota: Normalize missing special storage policies internally

StoragerefactorAbandoned

생략된 SpecialStoragePolicy를 manager 내부의 기본 정책으로 바꿔 정책 조회를 단순화하려던 패치입니다. 실제 버그 수정이나 성능 개선 같은 구체적인 이득을 제시하지 못해, 내부 단순화만으로는 변경 가치가 충분하지 않다는 리뷰 이후 중단했습니다.

문제 설명

quota 코드는 특별 저장소 정책이 있는지에 따라 권한 조회와 observer 등록·해제 경로를 나눴습니다. 초기 패치는 내부에서 null 정책을 금지하고 공개 QuotaManager 경계에서 기본 정책을 제공하려는 접근이었습니다.

리뷰 과정에서 여러 embedder가 의도적으로 null 정책을 전달한다는 점을 다시 확인했습니다. 이에 최종 Patch Set 2에서는 호출자의 정책 생략을 계속 허용하고, QuotaManagerImpl 내부의 정책 조회만 단순화하는 범위로 줄였습니다.

해결 내용

최종 패치에서 시도한 변경은 다음과 같습니다.

  1. QuotaManagerImpl 생성자에서 정책이 없으면 DefaultSpecialStoragePolicy를 만듭니다. 보호·무제한·영구 저장·세션 전용 저장 등의 특별 정책 조회에 모두 false를 반환합니다.
  2. 이 처리를 구현 클래스 생성자에 두어 QuotaManager를 통한 호출과 QuotaManagerImpl의 직접 생성 모두에서 null 입력을 계속 허용합니다.
  3. manager의 무제한 저장소와 세션 전용 할당량 조회에서 null 분기를 제거합니다. 사용량 추적기 자체의 nullable 정책 처리는 유지하며, 초기 패치의 non-null CHECK 강화는 최종 패치에 포함하지 않습니다.

리뷰어는 이 변경으로 얻는 구체적인 이득을 요청했습니다. 작성자는 범위를 세 파일로 줄이고 테스트 결과를 제시했지만, 실제 버그나 성능 개선은 찾지 못했으며 이득은 내부 단순화에 한정된다고 설명했습니다. 리뷰어가 그 정도로는 변경 가치가 충분하지 않다고 판단하자 작성자도 동의하고 CL을 중단했습니다.

테스트 방법

  • 최종 MissingSpecialStoragePolicy 테스트는 null 정책으로 QuotaManagerImpl을 직접 생성해도 일반 quota가 적용되고, 등록한 사용량 10과 무제한 사용량 0이 조회되는지 확인합니다.
  • 같은 테스트에서 사용량 추적기를 재생성한 뒤에도 사용량이 유지되고, 특별 권한이 없는 해당 버킷이 eviction 대상으로 선택되는지 검사합니다.
  • 작성자는 Patch Set 2 리뷰 답변에서 quota 관련 테스트 207개가 통과했다고 보고했습니다. 보고서 작성 과정에서 이 Chromium 테스트를 별도로 실행하지는 않았습니다.

확인한 CQ 통과 기록은 이전 Patch Set 1의 2026년 10월 1일 UTC 실행입니다. 이를 최종 Patch Set 2의 CQ 통과로 취급하지 않습니다. Gerrit의 마지막 중단 이벤트는 2026년 10월 6일 19:19:10 UTC이며, 이 CL은 병합되지 않았습니다.

관련 이슈와 외부 PR

초기 Patch Set 1은 기존 CL 3505537의 non-null 규칙 제안을 다시 다루었으나, 최종 패치는 null 입력을 유지하는 방식으로 변경됐습니다.

배운 점

  • 내부의 null 분기를 줄이기 전에 호출자가 정책을 생략하는 이유와 기존 계약을 확인해야 합니다.
  • 기본 객체로 분기를 없애는 것만으로는 반드시 개선이라고 할 수 없습니다. 복잡도 변화에 비해 실제 버그 예방이나 성능·유지보수상의 이득이 있는지 설명해야 합니다.
  • 테스트 통과는 동작을 검증하는 근거이며, 설계 변경의 필요성까지 입증하지는 않습니다.

참고 자료