OSSCA Chromium

기여 목록 / 8505417

Quota: Route storage pressure callback registration through proxy

StoragefixAbandoned

QuotaManagerImpl의 시퀀스 검사 강화에서 시작해 저장 공간 압박 콜백 등록을 proxy로 전달하는 방식으로 범위를 줄인 패치입니다. 리뷰에서 실제 호출 경로에 필요한 개선인지 받아들여지지 않았고, 최종적으로 중단했습니다.

문제 설명

초기 패치는 일부 콜백·인라인 접근자·테스트 헬퍼에 빠진 DCHECK_CALLED_ON_VALID_SEQUENCE를 추가하려는 시도였습니다. 이후 리뷰에서는 검사를 일괄적으로 늘리기보다 잘못된 시퀀스에서 호출하기 어려운 구조를 만들고, 실제 오용 가능성을 확인해야 한다는 의견이 나왔습니다.

최종 Patch Set 4는 StoragePartitionImpl의 저장 공간 압박 콜백 등록에 범위를 한정했습니다. 등록 요청을 QuotaManagerProxy로 전달하고 manager의 IO 시퀀스에서 처리하도록 하는 접근입니다.

해결 내용

초기에는 메서드별 시퀀스 DCHECK, IO 스레드로 콜백 등록 작업 게시, MockQuotaManager 생성자의 중복 setter 호출 제거를 함께 시도했습니다. 리뷰 후 이 범위를 줄이고, 최종 패치에서는 다음 변경을 제안했습니다.

  1. StoragePartitionImpl이 manager를 직접 호출하는 대신 QuotaManagerProxy::SetStoragePressureCallback()을 사용합니다.
  2. proxy는 manager의 작업 시퀀스가 아니면 요청을 게시하고, 해당 시퀀스에서 manager가 아직 살아 있을 때만 등록을 전달합니다. manager 파괴 후의 등록은 무시합니다.
  3. 구현 메서드를 private으로 옮겨 외부의 직접 호출을 막고, CHECK(io_thread_->RunsTasksInCurrentSequence())로 등록 시퀀스를 검사합니다.

리뷰어는 일괄 시퀀스 검사 추가가 코드 복잡도를 늘리고 실제 오용을 막는 구조적 개선이 아니라는 점을 지적했습니다. 최종 proxy 접근에도 해당 메서드가 실제로 IO 외 스레드에서 호출되는 상황이 아니라며 개선 효과를 인정하지 않았습니다. 이 리뷰 이후 작성자가 2026년 10월 5일 UTC에 CL을 중단했습니다.

테스트 방법

  • 최종 SetStoragePressureCallbackFromOtherSequence 테스트는 다른 시퀀스에서 보낸 등록 요청이 manager 작업 큐를 처리하기 전에는 반영되지 않고, 처리 후에는 알림을 받을 수 있는지 확인합니다.
  • SetStoragePressureCallbackAfterManagerDestruction은 manager가 파괴된 뒤 proxy로 등록을 요청해도 콜백이 호출되지 않는지 확인합니다.
  • 초기 패치의 DCHECK death test에는 단언 자체를 검사하기 위해 자식 프로세스를 실행하는 비용이 불필요하다는 리뷰 의견이 있었습니다. 초기 테스트와 최종 proxy 테스트를 구분해야 합니다.

Gerrit 기록상 최종 Patch Set 4는 2026년 10월 5일 UTC에 CQ dry run을 통과했습니다. 테스트 통과와 변경의 필요성에 대한 리뷰 판단은 별개였으며, 이 CL은 병합되지 않았습니다. 보고서 작성 과정에서 Chromium 테스트를 별도로 실행하지는 않았습니다.

관련 이슈와 외부 PR

배운 점

  • 시퀀스 검사가 빠져 있다는 사실만으로 변경의 필요성이 입증되지는 않습니다. 실제 호출 경로와 잘못된 시퀀스로 진입할 가능성을 먼저 확인해야 합니다.
  • proxy나 작업 게시 계층을 추가할 때는 필요한 수명·시퀀스 보장을 제공하는지와 코드 복잡도에 비해 이득이 있는지를 함께 검토해야 합니다.
  • CQ가 통과해도 설계상 개선 효과가 충분하지 않으면 패치를 중단할 수 있습니다.

참고 자료