OSSCA Chromium

기여 목록 / 8482191

[net] Remove the expired ReportingAndNEL.NumberOfLoaded* histograms

NetworkcleanupMerged

Reporting/NEL 저장소가 DB에서 불러온 NEL 정책·Reporting 엔드포인트·엔드포인트 그룹 개수를 기록하던 히스토그램 4개를 제거했습니다. 넷 모두 만료돼 기록되지 않는 상태였고, 코드에는 «조사가 끝나면 이 지표를 지워라»는 TODO가 세 곳 남아 있었습니다(crbug.com/40054414). 2파일 +5/−101. net/reporting OWNER ricea@가 먼저 승인했고, histograms.xml OWNER로 더한 nidhijaju@는 함수 주석 두 곳에 남은 «지표도 기록한다» 문장을 지우자고 제안하며 승인했습니다. 제안을 반영한 PS2는 코드 파일이 바뀐 패치셋이라 두 승인이 모두 지워졌습니다. nidhijaju@는 바로 다시 승인하고 CQ까지 걸었지만 ricea@의 승인이 빠져 있어 CV가 실행을 거부했고, ricea@의 재승인은 재요청과 재촉을 거쳐 일주일 뒤에 왔습니다. CQ 권한을 받은 뒤 처음으로 직접 CQ+2를 걸었는데, 첫 실행은 이 변경과 무관한 linux_chromium_asan_rel_ng의 blink_unittests 실패로 떨어졌고 같은 패치셋으로 다시 걸어 2026-10-11(UTC)에 머지됐습니다(1fb712e597938).

문제 설명

  • issue url: https://crbug.com/40054414
  • SQLitePersistentReportingAndNelStore는 로드가 끝날 때마다 ReportingAndNEL.NumberOfLoadedNELPolicies, …NELPolicies2, …ReportingEndpoints2, …ReportingEndpointGroups2를 기록했습니다. 뒤의 세 개에는 «TODO(crbug.com/40054414): Remove this metric once the investigation is done.»가 붙어 있었습니다.
  • 만료일은 2023-06-25(앞의 둘)와 2024-09-15(뒤의 둘)입니다. 히스토그램 문서는 만료된 히스토그램의 기록 코드를 죽은 코드로 보고 지우라고 합니다.

해결 내용

  • 히스토그램 이름 상수 4개와 기록 전용 함수 3개(RecordNumberOfLoaded*()), 그 호출 3곳을 지웠습니다.
  • 호출부는 if (load_success) { 기록 } else { DCHECK(...empty()) } 모양이었는데, 기록이 빠지면 else 쪽 검사만 남습니다. 그 검사를 잃지 않도록 DCHECK(load_success || ...empty())로 줄였습니다.
  • 파일에서 더 이상 쓰지 않는 base/metrics/histogram_macros.h include를 지웠습니다.
  • 두 로드 완료 함수(CompleteLoad…AndNotifyInForeground())의 주석에 남아 있던 «로드에 성공하면 지표도 기록한다» 문장을 지웠습니다(nidhijaju@ 제안, PS2).
  • tools/metrics/histograms/metadata/others/histograms.xml에서 네 항목을 지웠습니다.
-  if (load_success) {
-    RecordNumberOfLoadedNelPolicies(loaded_policies.size());
-  } else {
-    DCHECK(loaded_policies.empty());
-  }
+  DCHECK(load_success || loaded_policies.empty());

발굴 과정

09-29 «만료된 히스토그램 기록 코드» 스캔(만료 1,106 → 코드에 남은 809 → 한 파일·Mac 빌드 가능 528)에서 만료와 TODO가 함께 있는 묶음으로 골랐습니다. 시리즈 CL 2(8410045)에서 이미 손댄 파일이라, 그때 리뷰해 준 net/reporting OWNER ricea@에게 보냈습니다. 히스토그램에 적힌 다른 owner(yhirano@)는 Gerrit에서 inactive 상태였습니다. OSSCA #571.

테스트 방법

  • 같은 날 준비한 HD(Mac 인증서 저장소 히스토그램)와 통합 브랜치에서 net_unittests 증분 빌드 8스텝 6초
  • net_unittests --gtest_filter='SQLitePersistentReportingAndNELStoreTest*:*ReportingAndNel*' 27/27 통과
  • presubmit 0 경고
  • PS2(주석 두 곳)는 CQ 전체 실행으로 확인했습니다. 첫 시도는 이 변경과 무관한 linux_chromium_asan_rel_ng의 blink_unittests 실패로 떨어졌고, 같은 패치셋으로 다시 걸어 통과했습니다.

배운 점

  • 기록 코드를 지울 때 그 옆의 검사(DCHECK)가 같은 분기에 묶여 있으면, 분기를 통째로 지우지 말고 검사만 살려 합칩니다.
  • 히스토그램 owner가 inactive면 README의 «owner 전원 리뷰»는 남은 owner(디렉터리 OWNERS 파일)로 채웁니다.
  • 리뷰어 제안을 반영한 패치셋은 주석만 바뀌어도 코드 파일 변경이라 앞선 승인이 복사되지 않습니다. 재승인을 부탁할 때 «주석 두 곳만 고쳤다»고 한 줄로 밝혀 두면 리뷰어가 diff를 처음부터 다시 보지 않아도 됩니다.
  • CQ가 떨어지면 실패한 빌더와 테스트가 바꾼 파일에 닿는지부터 봅니다. net 저장소 코드만 바꾼 CL에서 blink_unittests가 깨졌다면 무관한 실패이므로 같은 패치셋으로 한 번 다시 겁니다.

참고 자료