기여 목록 / 8482191
[net] Remove the expired ReportingAndNEL.NumberOfLoaded* histograms
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.hinclude를 지웠습니다. - 두 로드 완료 함수(
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가 깨졌다면 무관한 실패이므로 같은 패치셋으로 한 번 다시 겁니다.