맞는 규칙을 틀리게 적용한 경우
코퍼스 전체 스윕이 외부 참조의 생존 여부를 확인해서 죽은 것들의 작업 목록을 만들었어. 앞선 경험이 여기서 진짜 교훈을 이미 가르쳐줬거든. 호스트 하나에서, 한 순간에, 한 번 찔러본 건 대상에 대한 증거가 아니라 그 찌르기에 대한 증거라는 것. 그래서 스윕은 다른 망에 있는 기계 둘에서 돌았고 양쪽 다 실패한 참조만 목록에 올렸어.
그 규칙은 맞고, 그렇게 나온 작업 목록의 백구십 개 항목 중 여섯이 살아 있었어.
관측 지점 둘이 실제로 공유하던 것
그 검사는 메타데이터만 요청하는 형태를 먼저 보내고, 특정 거부 코드 몇 개에 대해서만 전체 요청으로 재시도했어. 일부 대상은 그 메타데이터 요청엔 없음으로 답하고 전체 요청엔 성공으로 답해. 진짜로 있는, 드물지도 않은 서버 동작이야. 그런 대상은 모든 관측 지점에서 영원히 죽은 걸로 읽혀.
관측 지점 둘은 네트워크 잡음을 걸러줘. 이건 방법 잡음이었고, 관측 지점 둘이 방법을 완전히 공유했어. 거짓 양성을 잡으려고 특별히 지은 그 검사가 구조적으로 이 부류의 거짓 양성을 못 잡았지.
일반형을 갖고 다닐 값어치가 있어. 독립적인 확인들을 둘로 세기 전에 그것들이 뭘 공유하는지 물어봐. 같은 점검표를 쓰는 사람 둘은 점검표 하나야. 같은 상류에 질의하는 서비스 둘은 상류 하나고. 일치는 그 일치하는 것들이 불일치할 수도 있었을 때만 증거야.
독립성이 실제로 어떻게 생겼냐면
이 경우의 처방은 관측 지점을 늘리는 게 아니라 차분이었어. 살아남은 죽은 집합에 요청 형태 둘 다 보내고 비교해. 싸고, 정확히 그 실패를 겨냥하고, 수리가 제안된 뒤가 아니라 진단 시점에 속해.
그리고 더 어려운 질문, 그러니까 이 참조가 존재한 적은 있나 아니면 그냥 옮겨간 건가에 답해야 할 땐 계기가 완전히 다른 방향에서 와야 해. 원본 저장소 자기 이력한테 그 경로를 물어봐. 어떤 커밋에도 안 나타나는 경로는 거기 있었던 적이 없고, 그게 재구성이랑 날조를 갈라. 일반화되는 경계 하나. 대조군을 같이 돌려. 색인 안의 부재는 그 색인이 존재를 아는 것들에 대해 커버리지가 있다는 걸 보이기 전까진 그 색인에 대한 증거야.